public void ShouldRenameColumnDefaultConstraintIfMergedWithRenameOperation()
        {
            var op = new UpdateTableOperation("schema", "table",
                                              new[]
            {
                Column.Bit("no default", Nullable.NotNull, null, null, null),
                Column.Int("name2", Nullable.NotNull, "1", "name", null)
            },
                                              new[]
            {
                Column.Bit("no default2", Nullable.NotNull, null, null, null),
                Column.Int("name", Nullable.NotNull, "2", "name2", null)
            },
                                              null);
            var renameOp  = new RenameObjectOperation("SCHEMA", "NAME", "NEW NAME");
            var rename2Op = new RenameObjectOperation("SCHEMA", "NAME2", "NEW NAME2");

            op.Merge(renameOp);
            op.Merge(rename2Op);
            Assert.That(op.Disabled, Is.False);
            Assert.That(op.Name, Is.EqualTo("table"));
            Assert.That(op.AddColumns[1].Name, Is.EqualTo("name2"));
            Assert.That(op.AddColumns[1].DefaultConstraintName, Is.EqualTo("NEW NAME"));
            Assert.That(op.UpdateColumns[1].Name, Is.EqualTo("name"));
            Assert.That(op.UpdateColumns[1].DefaultConstraintName, Is.EqualTo("NEW NAME2"));
            Assert.That(renameOp.Disabled, Is.True);
            Assert.That(rename2Op.Disabled, Is.True);
        }
        public void ShouldNotRenameTableIfTableIsRenamedAfterColumnsAreRenamed()
        {
            var columns = new[]
            {
                Column.Int("c1", Nullable.NotNull, null, null, "description"),
                Column.VarChar("c2", new CharacterLength(1008), "collation", Nullable.NotNull, null, null, "description")
            };
            var op = new AddTableOperation("schema", "table", columns, false, "file group", "textimagefilegroup", "filestreamfilegroup", new string[0]);
            var renameColumn1Op = new RenameColumnOperation("SCHEMA", "TABLE", "C1", "C1New");
            var renameColumn2Op = new RenameColumnOperation("SCHEMA", "TABLE", "C2", "C2New");
            var renameTableOp   = new RenameObjectOperation("SCHEMA", "TABLE", "T1New");

            renameColumn2Op.Merge(renameTableOp);
            renameColumn1Op.Merge(renameTableOp);
            op.Merge(renameTableOp);

            renameColumn1Op.Merge(renameColumn2Op);
            op.Merge(renameColumn2Op);

            op.Merge(renameColumn1Op);

            Assert.That(op.Disabled, Is.False);
            Assert.That(renameColumn1Op.Disabled, Is.True);
            Assert.That(renameColumn2Op.Disabled, Is.True);
            Assert.That(renameTableOp.Disabled, Is.True);
            Assert.That(columns[0].Name, Is.EqualTo("C1New"));
            Assert.That(columns[1].Name, Is.EqualTo("C2New"));
            Assert.That(renameColumn2Op.TableName, Is.EqualTo("T1New"));
            Assert.That(renameColumn1Op.TableName, Is.EqualTo("T1New"));
            Assert.That(op.Name, Is.EqualTo("T1New"));
        }
Example #3
0
        public void ShouldNotDisableTableRenameWhenMerging()
        {
            var renameIdx   = new RenameIndexOperation("schema", "table", "name", "new name");
            var renameTable = new RenameObjectOperation("schema", "table", "new table");

            renameIdx.Merge(renameTable);
            Assert.That(renameTable.Disabled, Is.False);
            Assert.That(renameIdx.Disabled, Is.False);
        }
Example #4
0
        public void ShouldSetPropertiesForRenameTableOperation()
        {
            var op = new RenameObjectOperation(SchemaName, CurrentName, NewName);

            Assert.AreEqual(SchemaName, op.SchemaName);
            Assert.AreEqual(CurrentName, op.Name);
            Assert.AreEqual(NewName, op.NewName);
            Assert.AreEqual(TypeName, op.Type);
        }
Example #5
0
        public void ShouldRenameConstraintWhenMergedWithRename()
        {
            var op       = new AddDefaultConstraintOperation("schema", "table", "name", "column", "expression", false);
            var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "NEW NAME");

            op.Merge(renameOp);
            Assert.That(op.Name, Is.EqualTo("NEW NAME"));
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameOp.Disabled, Is.True);
        }
        public void ShouldUpdateOperationIfViewIsRenamed()
        {
            var op       = new AddExtendedPropertyOperation("schema", "view", "name", "value", true);
            var renameOp = new RenameObjectOperation("SCHEMA", "VIEW", "newview");

            op.Merge(renameOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameOp.Disabled, Is.False);
            Assert.That(op.TableViewName, Is.EqualTo("newview"));
        }
Example #7
0
        public void ShouldChangeConstraintReferencedTableNameIfReferencedTableRenamed()
        {
            var op            = new AddForeignKeyOperation("schema", "table", "name", new string[0], "ref schema", "ref table", new string[0], "on delete", "on update", false, false);
            var renameTableOp = new RenameObjectOperation("REF SCHEMA", "REF TABLE", "new table");

            op.Merge(renameTableOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameTableOp.Disabled, Is.True);
            Assert.That(op.ReferencesTableName, Is.EqualTo(renameTableOp.NewName));
        }
Example #8
0
        public void ShouldNotChangeConstraintReferencedTableNameIfANonReferencedTableRenamed(string schemaName, string tableName)
        {
            var op            = new AddForeignKeyOperation("schema", "table", "name", new string[0], "ref schema", "ref table", new string[0], "on delete", "on update", false, false);
            var renameTableOp = new RenameObjectOperation(schemaName, tableName, "new table");

            op.Merge(renameTableOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameTableOp.Disabled, Is.False);
            Assert.That(op.ReferencesTableName, Is.EqualTo("ref table"));
        }
        public void ShouldNotRenameObjectIfDifferentObject()
        {
            var op       = new AddStoredProcedureOperation("schema", "name", "definition");
            var renameOp = new RenameObjectOperation("SCHEMA", "another_object", "newname");

            op.Merge(renameOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameOp.Disabled, Is.False);
            Assert.That(op.Name, Is.EqualTo("name"));
        }
        public void ShouldRenameConstraintWhenMergedWithRenameObjectOperation()
        {
            var op       = new AddPrimaryKeyOperation("schema", "table", "name", new string[0], false, new string[0]);
            var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "NEW NAME");

            op.Merge(renameOp);
            Assert.That(op.Name, Is.EqualTo("NEW NAME"));
            Assert.That(renameOp.Disabled);
            Assert.That(op.Disabled, Is.False);
        }
Example #11
0
        public void ShouldChangeConstraintName()
        {
            var op = new AddForeignKeyOperation("schema", "table", "name", new string[0], "ref schema", "ref table",
                                                new string[0], "on delete", "on update", false, false);
            var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "new name");

            op.Merge(renameOp);
            Assert.That(op.Name, Is.EqualTo("new name"));
            Assert.That(renameOp.Disabled);
            Assert.That(op.Disabled, Is.False);
        }
Example #12
0
 public void ShouldDisableRenameOperationAndUpdateObjectNameWhenObjectIsRenamed()
 {
     // first, make sure we have them all.
     foreach (var objectOp in GetObjectOperations())
     {
         //var objectType = (objectOp is AddIndexOperation || objectOp is RemoveIndexOperation) ? "INDEX" : "OBJECT";
         var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "newname");
         objectOp.Merge(renameOp);
         Assert.That(objectOp.Disabled, Is.False);
         Assert.That(renameOp.Disabled, Is.True, $"Merge with rename on {objectOp.GetType().FullName} didn't disable rename operation.");
         Assert.That(objectOp.Name, Is.EqualTo("newname"), $"Merge with rename on {objectOp.GetType().FullName} didn't change name.");
     }
 }
        public void ShouldNotRenameTableIfRenamedTableNotAddedDuringMerge()
        {
            var renameColumn1Op = new RenameColumnOperation("SCHEMA", "TABLE", "C1", "C1New");
            var renameColumn2Op = new RenameColumnOperation("SCHEMA", "TABLE", "C2", "C2New");
            var renameTableOp   = new RenameObjectOperation("SCHEMA", "TABLE", "T1New");

            renameColumn2Op.Merge(renameTableOp);
            renameColumn1Op.Merge(renameTableOp);

            renameColumn1Op.Merge(renameColumn2Op);

            Assert.That(renameColumn1Op.Disabled, Is.False);
            Assert.That(renameColumn2Op.Disabled, Is.False);
            Assert.That(renameTableOp.Disabled, Is.False);
            Assert.That(renameColumn2Op.TableName, Is.EqualTo("TABLE"));
            Assert.That(renameColumn1Op.TableName, Is.EqualTo("TABLE"));
        }
        public void ShouldUpdateTargetObjectNameIfItGetsRenamedByMerge(string targetDatabaseName)
        {
            var op       = new AddSynonymOperation("schema", "name", "targetschema", targetDatabaseName, "targetobject");
            var renameOp = new RenameObjectOperation("TARGETSCHEMA", "TARGETOBJECT", "newtargetobject");

            op.Merge(renameOp);
            Assert.That(op.Disabled, Is.False);
            if (null == targetDatabaseName)
            {
                Assert.That(renameOp.Disabled, Is.True);
                Assert.That(op.TargetObjectName, Is.EqualTo("newtargetobject"));
            }
            else
            {
                Assert.That(renameOp.Disabled, Is.False);
                Assert.That(op.TargetObjectName, Is.EqualTo("targetobject"));
            }
        }
Example #15
0
        public void ShouldRenameColumnDefaultConstraintIfMergedWithRenameOperation()
        {
            var columns = new[]
            {
                Column.Bit("no default", Nullable.NotNull, null, null, null),
                Column.Int("Name", Nullable.NotNull, null, "DF_ID", null),
                Column.VarChar("ID2", new CharacterLength(500), null, Nullable.NotNull, null, "name", null),
            };
            var op       = new AddTableOperation("schema", "table", columns, false, null, null, null, new string[0]);
            var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "NEW NAME");

            op.Merge(renameOp);
            Assert.That(op.Name, Is.EqualTo("table"));
            Assert.That(op.Columns[0].DefaultConstraintName, Is.Null);
            Assert.That(op.Columns[1].DefaultConstraintName, Is.EqualTo("DF_ID"));
            Assert.That(op.Columns[2].DefaultConstraintName, Is.EqualTo("NEW NAME"));
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameOp.Disabled, Is.True);
        }
        public void ShouldDisableRenameOperationAndUpdateTableNameWhenRenamingTable()
        {
            var tableObjectOps = new TableObjectOperation[]
            {
                new AddRowGuidColOperation("schema", "name", "columnName"),
                new AddCheckConstraintOperation("schema", "name", "constraint", "expression", false, false),
                new AddDefaultConstraintOperation("schema", "name", "expression", "column", "constraint", false),
                new AddForeignKeyOperation("schema", "name", "key", new string[0], "referencesschema", "referencestable", new string[0], "ondelete", "onupdate", false, false),
                new AddIndexOperation("schema", "name", "index", new string[0], false, false, new string[0], "where", "on", "filestreamon", new string[0]),
                new AddPrimaryKeyOperation("schema", "name", "key", new string[0], false, new string[0]),
                new AddUniqueKeyOperation("schema", "name", "key", new string[0], false, 0, new string[0], "filegroup"),
                new DisableConstraintOperation("schema", "name", "constraint"),
                new EnableConstraintOperation("schema", "name", "constraint", false),
            };

            // first, make sure we have them all.
            var expectedOps = AppDomain.CurrentDomain.GetAssemblies()
                              .Where(assembly => assembly.GetName().Name == "Rivet")
                              .SelectMany(assembly => assembly.GetTypes())
                              .Where(type => type.IsSubclassOf(typeof(TableObjectOperation)))
                              .Where(type => !type.IsAbstract)
                              .Where(type => !type.Name.StartsWith("Remove", StringComparison.InvariantCultureIgnoreCase));

            Assert.That(expectedOps, Is.Not.Empty);
            foreach (var expectedOp in expectedOps)
            {
                var count = tableObjectOps.Where(t => t.GetType() == expectedOp).Count();
                Assert.That(count, Is.Not.EqualTo(0),
                            $"Class {expectedOp.FullName} is missing. Please add an instance of this type to this test.");
            }

            foreach (var tableObjectOp in tableObjectOps)
            {
                var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "newname");
                tableObjectOp.Merge(renameOp);
                Assert.That(tableObjectOp.Disabled, Is.False);
                Assert.That(renameOp.Disabled, Is.True,
                            $"Merge with rename on {tableObjectOp.GetType().FullName} didn't disable rename operation.");
                Assert.That(tableObjectOp.TableName, Is.EqualTo("newname"),
                            $"Merge with rename on {tableObjectOp.GetType().FullName} didn't change name.");
            }
        }
        public void ShouldAddNewColumnsToARenamedTable()
        {
            var addTableOp = new AddTableOperation("schema", "name", null, false, "file group", "text image file group",
                                                   "file stream file group", null);
            var renameTableOp = new RenameObjectOperation("schema", "name", "new table");
            var newColumns    = new[]
            {
                Column.TinyInt("errorId", Nullable.Null, null, null, "some description")
            };
            var updateTableOp = new UpdateTableOperation("schema", "new table", newColumns, null, null);

            addTableOp.Merge(renameTableOp);

            renameTableOp.Merge(updateTableOp);
            addTableOp.Merge(updateTableOp);

            Assert.That(renameTableOp.Disabled, Is.True);
            Assert.That(updateTableOp.Disabled, Is.True);
            Assert.That(addTableOp.Disabled, Is.False);
            Assert.That(addTableOp.Columns, Is.Not.Empty);
            Assert.That(addTableOp.Columns, Has.Count.EqualTo(1));
            Assert.That(addTableOp.Columns[0], Is.SameAs(newColumns[0]));
            Assert.That(addTableOp.Name, Is.EqualTo("new table"));
        }
Example #18
0
        public void ShouldWriteQueryForRenameTableOperation()
        {
            var op = new RenameObjectOperation(SchemaName, CurrentName, NewName);

            Assert.That(op.ToQuery(), Contains.Substring("@objname = '[schemaName].[currentName]', @newname = 'newName', @objtype = 'OBJECT'"));
        }