Exemple #1
0
        public void It_Should_Call_Back_To_The_Main_Panel()
        {
            var form    = MockRepository.GenerateMock <ISimpleDBMergeResultForm>();
            var results = new DatabaseMergeResult();
            var panel   = MockRepository.GenerateMock <IMainPanel>();

            var tableOp  = MockRepository.GenerateMock <IMergeOperation <ITable> >();
            var columnOp = MockRepository.GenerateMock <IMergeOperation <IColumn> >();
            var keyOp    = MockRepository.GenerateMock <IMergeOperation <IKey> >();
            var indexOp  = MockRepository.GenerateMock <IMergeOperation <IIndex> >();

            results.AddTableOperation(tableOp);
            results.AddColumnOperation(columnOp);
            results.AddKeyOperation(keyOp);
            results.AddIndexOperation(indexOp);

            new SimpleDBMergeResultPresenter(form, panel, results);
            form.GetEventRaiser(f => f.ChangesCancelled += null).Raise(form, null);

            panel.AssertWasCalled(f => f.CloseDatabaseRefreshResultsForm(Changes.WereRejected));
            tableOp.AssertWasNotCalled(o => o.RunOperation());
            columnOp.AssertWasNotCalled(o => o.RunOperation());
            keyOp.AssertWasNotCalled(o => o.RunOperation());
            indexOp.AssertWasNotCalled(o => o.RunOperation());
        }
        public void All_Of_The_Operations_Are_Put_Into_The_Result()
        {
            var columnOp = MockRepository.GenerateMock <MergeOperation <IColumn> >();
            var tableOp  = MockRepository.GenerateMock <MergeOperation <ITable> >();
            var keyOp    = MockRepository.GenerateMock <MergeOperation <IKey> >();
            var indexOp  = MockRepository.GenerateMock <MergeOperation <IIndex> >();

            DatabaseMergeResult result1 = new DatabaseMergeResult();

            result1.AddColumnOperation(columnOp);
            result1.AddTableOperation(tableOp);
            result1.AddKeyOperation(keyOp);
            result1.AddIndexOperation(indexOp);

            DatabaseMergeResult result2 = new DatabaseMergeResult();

            result2.CopyFrom(result1);

            Assert.That(result1.ColumnOperations, Has.Count(1));
            Assert.That(result1.TableOperations, Has.Count(1));
            Assert.That(result1.KeyOperations, Has.Count(1));
            Assert.That(result1.IndexOperations, Has.Count(1));

            Assert.That(result1.ColumnOperations.ElementAt(0), Is.SameAs(columnOp));
            Assert.That(result1.TableOperations.ElementAt(0), Is.SameAs(tableOp));
            Assert.That(result1.KeyOperations.ElementAt(0), Is.SameAs(keyOp));
            Assert.That(result1.IndexOperations.ElementAt(0), Is.SameAs(indexOp));
        }
        public void All_Of_The_Operations_Are_Put_Into_The_Result()
        {
            var columnOp = MockRepository.GenerateMock<MergeOperation<IColumn>>();
            var tableOp = MockRepository.GenerateMock<MergeOperation<ITable>>();
            var keyOp = MockRepository.GenerateMock<MergeOperation<IKey>>();
            var indexOp = MockRepository.GenerateMock<MergeOperation<IIndex>>();

            DatabaseMergeResult result1 = new DatabaseMergeResult();
            result1.AddColumnOperation(columnOp);
            result1.AddTableOperation(tableOp);
            result1.AddKeyOperation(keyOp);
            result1.AddIndexOperation(indexOp);

            DatabaseMergeResult result2 = new DatabaseMergeResult();
            result2.CopyFrom(result1);

            Assert.That(result1.ColumnOperations, Has.Count(1));
            Assert.That(result1.TableOperations, Has.Count(1));
            Assert.That(result1.KeyOperations, Has.Count(1));
            Assert.That(result1.IndexOperations, Has.Count(1));

            Assert.That(result1.ColumnOperations.ElementAt(0), Is.SameAs(columnOp));
            Assert.That(result1.TableOperations.ElementAt(0), Is.SameAs(tableOp));
            Assert.That(result1.KeyOperations.ElementAt(0), Is.SameAs(keyOp));
            Assert.That(result1.IndexOperations.ElementAt(0), Is.SameAs(indexOp));
        }
Exemple #4
0
        public SimpleDBMergeResultPresenter(
            ISimpleDBMergeResultForm form,
            IMainPanel panel,
            DatabaseMergeResult results) : base(panel)
        {
            this.form    = form;
            this.results = results;

            SetupForm();
        }
Exemple #5
0
        public void The_Event_Handlers_Are_Registered()
        {
            var form    = MockRepository.GenerateMock <ISimpleDBMergeResultForm>();
            var results = new DatabaseMergeResult();
            var panel   = MockRepository.GenerateStub <IMainPanel>();

            new SimpleDBMergeResultPresenter(form, panel, results);

            form.AssertWasCalled(f => f.ChangesAccepted  += null, c => c.IgnoreArguments());
            form.AssertWasCalled(f => f.ChangesCancelled += null, c => c.IgnoreArguments());
        }
Exemple #6
0
        public void It_Should_Call_Back_To_The_Main_Panel()
        {
            var form    = MockRepository.GenerateMock <ISimpleDBMergeResultForm>();
            var results = new DatabaseMergeResult();
            var panel   = MockRepository.GenerateMock <IMainPanel>();

            var presenter = new SimpleDBMergeResultPresenter(form, panel, results);

            presenter.Show();

            panel.AssertWasCalled(f => f.ShowDatabaseRefreshResultsForm(form));
        }
        public void The_Operations_Come_Back_In_A_Good_Order()
        {
            DatabaseMergeResult result = new DatabaseMergeResult();
            result.AddIndexOperation(new IndexAdditionOperation(new Table(), new Index()));
            result.AddKeyOperation(new KeyAdditionOperation(new Table(), new Key()));
            // Not a ITwoStepMergeOperation
            result.AddTableOperation(new TableAdditionOperation(new Database(""), new Table()));

            IEnumerable<ITwoStepMergeOperation> list = result.TwoStepOperations;

            Assert.That(list, Has.Count(2));
            Assert.That(list.ElementAt(0) is KeyAdditionOperation);
            Assert.That(list.ElementAt(1) is IndexAdditionOperation);
        }
Exemple #8
0
        public void The_Operations_Come_Back_In_A_Good_Order()
        {
            DatabaseMergeResult result = new DatabaseMergeResult();

            result.AddIndexOperation(new IndexAdditionOperation(new Table(), new Index()));
            result.AddKeyOperation(new KeyAdditionOperation(new Table(), new Key()));
            // Not a ITwoStepMergeOperation
            result.AddTableOperation(new TableAdditionOperation(new Database(""), new Table()));

            IEnumerable <ITwoStepMergeOperation> list = result.TwoStepOperations;

            Assert.That(list, Has.Count(2));
            Assert.That(list.ElementAt(0) is KeyAdditionOperation);
            Assert.That(list.ElementAt(1) is IndexAdditionOperation);
        }
Exemple #9
0
        public void The_Form_Is_Set_Up_Properly()
        {
            var form    = MockRepository.GenerateMock <ISimpleDBMergeResultForm>();
            var results = new DatabaseMergeResult();
            var panel   = MockRepository.GenerateStub <IMainPanel>();
            var addOp   = new TableAdditionOperation(new Database("db"), new Table("table"));
            var remOp   = new TableRemovalOperation(new Table("table"));

            results.AddTableOperation(addOp);
            results.AddTableOperation(remOp);

            new SimpleDBMergeResultPresenter(form, panel, results);

            // Not the nicest syntax, but this is a test to check that all
            form.AssertWasCalled(f => f.AddedTableOperations = Arg <IEnumerable <IMergeOperation <ITable> > > .Matches(t => t.Count() == 1 &&
                                                                                                                       t.ElementAt(0) == addOp));
            form.AssertWasCalled(f => f.RemovedTableOperations = Arg <IEnumerable <IMergeOperation <ITable> > > .Matches(t => t.Count() == 1 &&
                                                                                                                         t.ElementAt(0) == remOp));
        }
Exemple #10
0
        public void It_Should_Apply_Changes_And_Call_Back_To_The_Main_Panel()
        {
            var form    = MockRepository.GenerateStub <ISimpleDBMergeResultForm>();
            var results = new DatabaseMergeResult();
            var panel   = MockRepository.GenerateMock <IMainPanel>();

            // These are all two step processes
            var tableOp  = new MockMergeOperation <ITable, Table>();
            var columnOp = new MockMergeOperation <IColumn, Column>();
            var keyOp    = new MockMergeOperation <IKey, Key>();
            var indexOp  = new MockMergeOperation <IIndex, Index>();

            results.AddTableOperation(tableOp);
            results.AddColumnOperation(columnOp);
            results.AddKeyOperation(keyOp);
            results.AddIndexOperation(indexOp);

            form.Stub(f => { var v = f.SelectedAddedTableOperations; }).Return(new List <IMergeOperation <ITable> > {
                tableOp
            });
            form.Stub(f => { var v = f.SelectedRemovedTableOperations; }).Return(new List <IMergeOperation <ITable> >());

            new SimpleDBMergeResultPresenter(form, panel, results);
            form.GetEventRaiser(f => f.ChangesAccepted += null).Raise(form, null);

            panel.AssertWasCalled(f => f.CloseDatabaseRefreshResultsForm(Changes.WereAccepted));

            Assert.That(tableOp.OperationRun, Is.True);
            Assert.That(indexOp.OperationRun, Is.True);
            Assert.That(columnOp.OperationRun, Is.True);
            Assert.That(keyOp.OperationRun, Is.True);

            Assert.That(tableOp.SecondStepRun, Is.True);
            Assert.That(indexOp.SecondStepRun, Is.True);
            Assert.That(columnOp.SecondStepRun, Is.True);
            Assert.That(keyOp.SecondStepRun, Is.True);
        }
        public void Fill(DatabaseMergeResult results, IDatabase db1, IDatabase db2)
        {
            if (InvokeRequired)
            {
                Invoke(new MethodInvoker(() => Fill(results, db1, db2)));
                return;
            }
            DB1 = db1;
            DB2 = db2;

            advTreeTables.BeginUpdate();
            nodeNewEntities.Nodes.Clear();
            nodeModifiedEntities.Nodes.Clear();
            nodeRemovedEntities.Nodes.Clear();

            nodeNewEntities.Checked      = true;
            nodeModifiedEntities.Checked = true;
            nodeRemovedEntities.Checked  = false;

            try
            {
                #region Database-only

                foreach (TableAdditionOperation addedTableOperation in results.TableOperations.Where(r => r is TableAdditionOperation))
                {
                    Node node = new Node(string.Format("{0}.{1}", addedTableOperation.Object.Schema, addedTableOperation.Object.Name));
                    node.Tag             = addedTableOperation;
                    node.CheckBoxVisible = true;
                    node.Checked         = false;
                    node.ImageIndex      = IMG_NEW;
                    nodeRemovedEntities.Nodes.Add(node);
                }

                #endregion

                #region Model-only
                IList <SynchroGrid.SynchroCanvas.TableMatch> MatchesModelOnly = new List <SynchroGrid.SynchroCanvas.TableMatch>();

                foreach (TableRemovalOperation removedTableOperation in results.TableOperations.Where(r => r is TableRemovalOperation))
                {
                    Node node = new Node(string.Format("{0}.{1}", removedTableOperation.Object.Schema, removedTableOperation.Object.Name));
                    node.Tag             = removedTableOperation;
                    node.CheckBoxVisible = true;
                    node.Checked         = true;
                    node.ImageIndex      = IMG_REMOVED;
                    nodeNewEntities.Nodes.Add(node);
                }

                #endregion

                #region Changes
                HashSet <string> changedTables = new HashSet <string>();

                #region Get tables with changes
                foreach (var result in results.ColumnOperations)
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));
                }

                foreach (var result in results.IndexOperations)
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));
                }

                foreach (var result in results.KeyOperations)
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));
                }

                //foreach (var result in results.RelationshipOperations)
                //    changedTables.Add(string.Format("{0}.{1}", result.Object.PrimaryTable.Schema, result.Object.PrimaryTable.Name));

                #endregion

                foreach (string changedTable in changedTables)
                {
                    Node node = new Node(changedTable);
                    node.Tag             = changedTable;
                    node.CheckBoxVisible = true;
                    node.Checked         = true;
                    node.ImageIndex      = IMG_CHANGED;
                    nodeModifiedEntities.Nodes.Add(node);

                    #region Columns
                    foreach (ColumnAdditionOperation newColumn in results.ColumnOperations.Where(r => r is ColumnAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Remove column from database: [{0}]", newColumn.Object.Name));
                        columnnode.Tag = newColumn;
                        node.Nodes.Add(columnnode);
                    }
                    foreach (ColumnChangeOperation changedColumn in results.ColumnOperations.Where(r => r is ColumnChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Update column in database [{0}]", changedColumn.Object.Name));
                        columnnode.Tag = changedColumn;
                        node.Nodes.Add(columnnode);

                        foreach (string d in changedColumn.Description.Split(','))
                        {
                            columnnode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (ColumnRemovalOperation removedColumn in results.ColumnOperations.Where(r => r is ColumnRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Add column to database: [{0}]", removedColumn.Object.Name));
                        columnnode.Tag = removedColumn;
                        node.Nodes.Add(columnnode);
                    }
                    #endregion

                    #region Indexes
                    foreach (IndexAdditionOperation newIndex in results.IndexOperations.Where(r => r is IndexAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Remove index from database: [{0}]", newIndex.Object.Name));
                        indexNode.Tag = newIndex;
                        node.Nodes.Add(indexNode);
                    }
                    foreach (IndexChangeOperation changedIndex in results.IndexOperations.Where(r => r is IndexChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Update index in database [{0}]", changedIndex.Object.Name));
                        indexNode.Tag = changedIndex;
                        node.Nodes.Add(indexNode);

                        foreach (string d in changedIndex.Description.Split(','))
                        {
                            indexNode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (IndexRemovalOperation removedIndex in results.IndexOperations.Where(r => r is IndexRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Add index to database: [{0}]", removedIndex.Object.Name));
                        indexNode.Tag = removedIndex;
                        node.Nodes.Add(indexNode);
                    }
                    #endregion

                    #region Keys
                    foreach (KeyAdditionOperation newKey in results.KeyOperations.Where(r => r is KeyAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Remove key from database: [{0}]", newKey.Object.Name));
                        keyNode.Tag = newKey;
                        node.Nodes.Add(keyNode);
                    }
                    foreach (KeyChangeOperation changedKey in results.KeyOperations.Where(r => r is KeyChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Update key in database [{0}]", changedKey.Object.Name));
                        keyNode.Tag = changedKey;
                        node.Nodes.Add(keyNode);

                        foreach (string d in changedKey.Description.Split(','))
                        {
                            keyNode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (KeyRemovalOperation removedKey in results.KeyOperations.Where(r => r is KeyRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Add key to database: [{0}]", removedKey.Object.Name));
                        keyNode.Tag = removedKey;
                        node.Nodes.Add(keyNode);
                    }
                    #endregion

                    #region Relationships
                    //foreach (RelationshipAdditionOperation newRelationship in results.RelationshipOperations.Where(r => r is RelationshipAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable).Distinct())
                    //{
                    //    Node relationshipNode = new Node(string.Format("Remove relationship from database, with {0}: [{1}]", newRelationship.Object.ForeignTable.Name, newRelationship.Object.Name));
                    //    relationshipNode.Tag = newRelationship;
                    //    node.Nodes.Add(relationshipNode);
                    //}
                    //foreach (RelationshipChangeOperation changedRelationship in results.RelationshipOperations.Where(r => r is RelationshipChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    //{
                    //    Node relationshipNode = new Node(string.Format("Update relationship in database, with {0}:  [{1}]", changedRelationship.Object.ForeignTable.Name, changedRelationship.Object.Name));
                    //    relationshipNode.Tag = changedRelationship;
                    //    node.Nodes.Add(relationshipNode);

                    //    foreach (string d in changedRelationship.Description.Split(','))
                    //        relationshipNode.Nodes.Add(new Node(d));
                    //}
                    //foreach (RelationshipRemovalOperation removedRelationship in results.RelationshipOperations.Where(r => r is RelationshipRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    //{
                    //    Node relationshipNode = new Node(string.Format("Add relationship to database, with {0}: [{1}]", removedRelationship.Object.ForeignTable.Name, removedRelationship.Object.Name));
                    //    relationshipNode.Tag = removedRelationship;
                    //    node.Nodes.Add(relationshipNode);
                    //}
                    #endregion
                }
                #endregion

                nodeNewEntities.Visible      = nodeNewEntities.Nodes.Count > 0;
                nodeModifiedEntities.Visible = nodeModifiedEntities.Nodes.Count > 0;
                nodeRemovedEntities.Visible  = nodeRemovedEntities.Nodes.Count > 0;

                if (!nodeNewEntities.Visible && !nodeModifiedEntities.Visible && !nodeRemovedEntities.Visible)
                {
                    nodeEmpty.Text    = "The database has no changes";
                    nodeEmpty.Visible = true;
                }
                else
                {
                    nodeEmpty.Visible = false;
                }
            }
            finally
            {
                advTreeTables.EndUpdate();
            }
        }
 public void SetDatabaseChanges(DatabaseMergeResult results)
 {
     var processor = new DBMergeResultProcessor(results);
     rtbChanges.Text = processor.GetTextResults();
 }
Exemple #13
0
        public void Fill(DatabaseMergeResult results, IDatabase db1, IDatabase db2)
        {
            if (results == null || db1 == null || db2 == null)
            {
                throw new Exception(string.Format("Parameter is null (DatabaseChanges.Fill). Please inform Slyce of this error, including your scenario. [{0}{1}{2}]",
                                                  results == null ? "results: null" : "",
                                                  db1 == null ? "db1: null" : "",
                                                  db2 == null ? "db2: null" : ""));
            }

            if (InvokeRequired)
            {
                Invoke(new MethodInvoker(() => Fill(results, db1, db2)));
                return;
            }
            DB1 = db1;
            DB2 = db2;

            advTreeTables.BeginUpdate();

            nodeNewTables.Nodes.Clear();
            nodeModifiedTables.Nodes.Clear();
            nodeRemovedTables.Nodes.Clear();

            nodeNewViews.Nodes.Clear();
            nodeModifiedViews.Nodes.Clear();
            nodeRemovedViews.Nodes.Clear();

            nodeNewTables.Checked      = true;
            nodeModifiedTables.Checked = true;
            nodeRemovedTables.Checked  = false;

            nodeNewViews.Checked      = false;
            nodeModifiedViews.Checked = true;
            nodeRemovedViews.Checked  = false;

            try
            {
                #region Database-only
                Node   schemaNode    = null;
                string currentSchema = null;

                foreach (TableAdditionOperation addedTableOperation in results.TableOperations.Where(r => r is TableAdditionOperation).OrderBy(a => a.Object.Schema).ThenBy(a => a.Object.Name))
                {
                    if (addedTableOperation.Object.Schema != currentSchema)
                    {
                        currentSchema = addedTableOperation.Object.Schema;
                        schemaNode    = new Node(currentSchema)
                        {
                            CheckBoxVisible = true,
                            Checked         = true
                        };
                        nodeNewTables.Nodes.Add(schemaNode);
                    }
                    Node node = new Node(addedTableOperation.Object.Name);
                    node.Tag             = addedTableOperation;
                    node.CheckBoxVisible = true;
                    node.Checked         = true;
                    node.ImageIndex      = IMG_NEW;
                    schemaNode.Nodes.Add(node);
                }
                schemaNode    = null;
                currentSchema = null;

                foreach (TableAdditionOperation addedViewOperation in results.ViewOperations.Where(r => r is TableAdditionOperation).OrderBy(a => a.Object.Schema).ThenBy(a => a.Object.Name))
                {
                    if (addedViewOperation.Object.Schema != currentSchema)
                    {
                        currentSchema = addedViewOperation.Object.Schema;
                        schemaNode    = new Node(currentSchema)
                        {
                            CheckBoxVisible = true,
                            Checked         = false
                        };
                        nodeNewViews.Nodes.Add(schemaNode);
                    }
                    Node node = new Node(addedViewOperation.Object.Name);
                    node.Tag             = addedViewOperation;
                    node.CheckBoxVisible = true;
                    node.Checked         = false;
                    node.ImageIndex      = IMG_NEW;
                    schemaNode.Nodes.Add(node);
                }

                #endregion

                #region Model-only
                schemaNode    = null;
                currentSchema = null;

                foreach (TableRemovalOperation removedTableOperation in results.TableOperations.Where(r => r is TableRemovalOperation).OrderBy(a => a.Object.Schema).ThenBy(a => a.Object.Name))
                {
                    if (removedTableOperation.Object.Schema != currentSchema)
                    {
                        currentSchema = removedTableOperation.Object.Schema;
                        schemaNode    = new Node(currentSchema)
                        {
                            CheckBoxVisible = true,
                            Checked         = false
                        };
                        nodeRemovedTables.Nodes.Add(schemaNode);
                    }
                    Node node = new Node(removedTableOperation.Object.Name);
                    node.Tag             = removedTableOperation;
                    node.CheckBoxVisible = true;
                    node.Checked         = false;
                    node.ImageIndex      = IMG_REMOVED;
                    schemaNode.Nodes.Add(node);
                }
                schemaNode    = null;
                currentSchema = null;

                foreach (TableRemovalOperation removedViewOperation in results.ViewOperations.Where(r => r is TableRemovalOperation).OrderBy(a => a.Object.Schema).ThenBy(a => a.Object.Name))
                {
                    if (removedViewOperation.Object.Schema != currentSchema)
                    {
                        currentSchema = removedViewOperation.Object.Schema;
                        schemaNode    = new Node(currentSchema)
                        {
                            CheckBoxVisible = true,
                            Checked         = false
                        };
                        nodeRemovedViews.Nodes.Add(schemaNode);
                    }
                    Node node = new Node(removedViewOperation.Object.Name);
                    node.Tag             = removedViewOperation;
                    node.CheckBoxVisible = true;
                    node.Checked         = false;
                    node.ImageIndex      = IMG_REMOVED;
                    schemaNode.Nodes.Add(node);
                }

                #endregion

                #region Changes
                HashSet <string> changedTables = new HashSet <string>();

                #region Get tables with changes
                foreach (var result in results.ColumnOperations.Where(o => o.Object != null && o.Object.Parent != null))
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));
                }

                foreach (var result in results.IndexOperations.Where(o => o.Object != null && o.Object.Parent != null))
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));
                }

                foreach (var result in results.KeyOperations.Where(o => o.Object != null && o.Object.Parent != null))
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));
                }

                foreach (var result in results.RelationshipOperations.Where(o => o.Object != null && o.Object.PrimaryTable != null))
                {
                    changedTables.Add(string.Format("{0}.{1}", result.Object.PrimaryTable.Schema, result.Object.PrimaryTable.Name));
                }

                #endregion

                schemaNode    = null;
                currentSchema = null;

                foreach (string changedTable in changedTables)
                {
                    string schema    = changedTable.Split('.')[0];
                    string tableName = changedTable.Split('.')[1];

                    if (schema != currentSchema)
                    {
                        currentSchema = schema;
                        schemaNode    = new Node(currentSchema)
                        {
                            CheckBoxVisible = true,
                            Checked         = true
                        };
                        nodeModifiedTables.Nodes.Add(schemaNode);
                    }
                    Node node = new Node(tableName);
                    node.Tag             = changedTable;
                    node.CheckBoxVisible = true;
                    node.Checked         = true;
                    node.ImageIndex      = IMG_CHANGED;
                    schemaNode.Nodes.Add(node);

                    #region Columns
                    foreach (ColumnAdditionOperation newColumn in results.ColumnOperations.Where(r => r is ColumnAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Add column to model: [{0}]", newColumn.Object.Name));
                        columnnode.Tag = newColumn;
                        node.Nodes.Add(columnnode);
                    }
                    foreach (ColumnChangeOperation changedColumn in results.ColumnOperations.Where(r => r is ColumnChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Update column in model [{0}]", changedColumn.Object.Name));
                        columnnode.Tag = changedColumn;
                        node.Nodes.Add(columnnode);

                        foreach (string d in changedColumn.Description.Split(','))
                        {
                            columnnode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (ColumnRemovalOperation removedColumn in results.ColumnOperations.Where(r => r is ColumnRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Remove column from model: [{0}]", removedColumn.Object.Name));
                        columnnode.Tag = removedColumn;
                        node.Nodes.Add(columnnode);
                    }
                    #endregion

                    #region Indexes
                    foreach (IndexAdditionOperation newIndex in results.IndexOperations.Where(r => r is IndexAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Add index to model: [{0}]", newIndex.Object.Name));
                        indexNode.Tag = newIndex;
                        node.Nodes.Add(indexNode);
                    }
                    foreach (IndexChangeOperation changedIndex in results.IndexOperations.Where(r => r is IndexChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Update index in model [{0}]", changedIndex.Object.Name));
                        indexNode.Tag = changedIndex;
                        node.Nodes.Add(indexNode);

                        foreach (string d in changedIndex.Description.Split(','))
                        {
                            indexNode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (IndexRemovalOperation removedIndex in results.IndexOperations.Where(r => r is IndexRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Remove index from model: [{0}]", removedIndex.Object.Name));
                        indexNode.Tag = removedIndex;
                        node.Nodes.Add(indexNode);
                    }
                    #endregion

                    #region Keys
                    foreach (KeyAdditionOperation newKey in results.KeyOperations.Where(r => r is KeyAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Add key to model: [{0}]", newKey.Object.Name));
                        keyNode.Tag = newKey;
                        node.Nodes.Add(keyNode);
                    }
                    foreach (KeyChangeOperation changedKey in results.KeyOperations.Where(r => r is KeyChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Update key in model [{0}]", changedKey.Object.Name));
                        keyNode.Tag = changedKey;
                        node.Nodes.Add(keyNode);

                        foreach (string d in changedKey.Description.Split(','))
                        {
                            keyNode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (KeyRemovalOperation removedKey in results.KeyOperations.Where(r => r is KeyRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Remove key from model: [{0}]", removedKey.Object.Name));
                        keyNode.Tag = removedKey;
                        node.Nodes.Add(keyNode);
                    }
                    #endregion

                    #region Relationships
                    foreach (RelationshipAdditionOperation newRelationship in results.RelationshipOperations.Where(r => r is RelationshipAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    {
                        Node relationshipNode = new Node(string.Format("Add relationship to model, with {0}: [{1}]", newRelationship.Object.ForeignTable.Name, newRelationship.Object.Name));
                        relationshipNode.Tag = newRelationship;
                        node.Nodes.Add(relationshipNode);
                    }
                    foreach (RelationshipChangeOperation changedRelationship in results.RelationshipOperations.Where(r => r is RelationshipChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    {
                        Node relationshipNode = new Node(string.Format("Update relationship in model, with {0}:  [{1}]", changedRelationship.Object.ForeignTable.Name, changedRelationship.Object.Name));
                        relationshipNode.Tag = changedRelationship;
                        node.Nodes.Add(relationshipNode);

                        foreach (string d in changedRelationship.Description.Split(','))
                        {
                            relationshipNode.Nodes.Add(new Node(d));
                        }
                    }
                    foreach (RelationshipRemovalOperation removedRelationship in results.RelationshipOperations.Where(r => r is RelationshipRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    {
                        Node relationshipNode = new Node(string.Format("Remove relationship from model, with {0}: [{1}]", removedRelationship.Object.ForeignTable.Name, removedRelationship.Object.Name));
                        relationshipNode.Tag = removedRelationship;
                        node.Nodes.Add(relationshipNode);
                    }
                    #endregion
                }
                #endregion

                nodeNewTables.Visible      = nodeNewTables.Nodes.Count > 0;
                nodeModifiedTables.Visible = nodeModifiedTables.Nodes.Count > 0;
                nodeRemovedTables.Visible  = nodeRemovedTables.Nodes.Count > 0;

                nodeNewViews.Visible      = nodeNewViews.Nodes.Count > 0;
                nodeModifiedViews.Visible = nodeModifiedViews.Nodes.Count > 0;
                nodeRemovedViews.Visible  = nodeRemovedViews.Nodes.Count > 0;

                if (!nodeNewTables.Visible && !nodeModifiedTables.Visible && !nodeRemovedTables.Visible &&
                    !nodeNewViews.Visible && !nodeModifiedViews.Visible && !nodeRemovedViews.Visible)
                {
                    nodeEmpty.Text    = "The database has no changes";
                    nodeEmpty.Visible = true;
                }
                else
                {
                    nodeEmpty.Visible = false;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Error in DatabaseChanges.Fill: {0}\n{1}", ex.Message, ex.StackTrace));
            }
            finally
            {
                advTreeTables.EndUpdate();
            }
        }
Exemple #14
0
 public override void DetachFromModel()
 {
     results  = null;
     Detached = true;
 }
Exemple #15
0
 public DBMergeResultProcessor(DatabaseMergeResult results)
 {
     this.results = results;
 }
        public DatabaseMergeResult MergeDatabases(IDatabase db1, IDatabase db2)
        {
            DatabaseMergeResult mergeResult = new DatabaseMergeResult();

            #region Tables
            IEnumerable<ITable> tables1 = db1.Tables;
            IEnumerable<ITable> tables2 = db2.Tables;

            List<ITable> newTables = tables1.Compliment(tables2).ToList();
            List<ITable> removedTables = tables2.Compliment(tables1).ToList();

            // Check for changed tables.
            Func<ITable, string> sorter = n => n.Name;
            Table.TableComparer comparer = new Table.TableComparer();
            IEnumerable<ITable> intersection1 = tables1.Intersect(tables2, comparer).OrderBy(sorter);
            var commonItems = intersection1.Zip(tables2.Intersect(tables1, comparer).OrderBy(sorter));

            foreach (var memberPair in commonItems)
                if (memberPair.Key.HasChanges(memberPair.Value))
                    mergeResult.AddTableOperation(new TableChangeOperation(memberPair.Key, memberPair.Value));

            foreach (var t in newTables)
                mergeResult.AddTableOperation(new TableAdditionOperation(db1, t));

            foreach (var t in removedTables)
                mergeResult.AddTableOperation(new TableRemovalOperation(t));

            TableProcessor processor = new TableProcessor();
            var tableResults = processor.ProcessTables(tables1, tables2);
            mergeResult.CopyFrom(tableResults);
            #endregion

            #region Views
            IEnumerable<ITable> views1 = db1.Views;
            IEnumerable<ITable> views2 = db2.Views;

            List<ITable> newViews = views1.Compliment(views2).ToList();
            List<ITable> removedViews = views2.Compliment(views1).ToList();

            // Check for changed tables.
            IEnumerable<ITable> viewsIntersection1 = views1.Intersect(views2, comparer).OrderBy(sorter);
            var commonViewItems = intersection1.Zip(views2.Intersect(views1, comparer).OrderBy(sorter));

            foreach (var memberPair in commonViewItems)
                if (memberPair.Key.HasChanges(memberPair.Value))
                    mergeResult.AddViewOperation(new TableChangeOperation(memberPair.Key, memberPair.Value));

            foreach (var t in newViews)
                mergeResult.AddViewOperation(new TableAdditionOperation(db1, t));

            foreach (var t in removedViews)
                mergeResult.AddViewOperation(new TableRemovalOperation(t));

            TableProcessor viewProcessor = new TableProcessor();
            var viewResults = processor.ProcessTables(views1, views2);
            mergeResult.CopyFrom(viewResults);
            #endregion

            return mergeResult;
        }
 public void Fill(DatabaseMergeResult results, IDatabase db1, IDatabase db2)
 {
     databaseChanges1.Fill(results, db1, db2);
 }
Exemple #18
0
        public void Fill(DatabaseMergeResult results, IDatabase db1, IDatabase db2)
        {
            if (InvokeRequired)
            {
                Invoke(new MethodInvoker(() => Fill(results, db1, db2)));
                return;
            }
            DB1 = db1;
            DB2 = db2;

            advTreeTables.BeginUpdate();
            nodeNewEntities.Nodes.Clear();
            nodeModifiedEntities.Nodes.Clear();
            nodeRemovedEntities.Nodes.Clear();

            nodeNewEntities.Checked = true;
            nodeModifiedEntities.Checked = true;
            nodeRemovedEntities.Checked = false;

            try
            {
                #region Database-only

                foreach (TableAdditionOperation addedTableOperation in results.TableOperations.Where(r => r is TableAdditionOperation))
                {
                    Node node = new Node(string.Format("{0}.{1}", addedTableOperation.Object.Schema, addedTableOperation.Object.Name));
                    node.Tag = addedTableOperation;
                    node.CheckBoxVisible = true;
                    node.Checked = false;
                    node.ImageIndex = IMG_NEW;
                    nodeRemovedEntities.Nodes.Add(node);
                }

                #endregion

                #region Model-only
                IList<SynchroGrid.SynchroCanvas.TableMatch> MatchesModelOnly = new List<SynchroGrid.SynchroCanvas.TableMatch>();

                foreach (TableRemovalOperation removedTableOperation in results.TableOperations.Where(r => r is TableRemovalOperation))
                {
                    Node node = new Node(string.Format("{0}.{1}", removedTableOperation.Object.Schema, removedTableOperation.Object.Name));
                    node.Tag = removedTableOperation;
                    node.CheckBoxVisible = true;
                    node.Checked = true;
                    node.ImageIndex = IMG_REMOVED;
                    nodeNewEntities.Nodes.Add(node);
                }

                #endregion

                #region Changes
                HashSet<string> changedTables = new HashSet<string>();

                #region Get tables with changes
                foreach (var result in results.ColumnOperations)
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));

                foreach (var result in results.IndexOperations)
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));

                foreach (var result in results.KeyOperations)
                    changedTables.Add(string.Format("{0}.{1}", result.Object.Parent.Schema, result.Object.Parent.Name));

                //foreach (var result in results.RelationshipOperations)
                //    changedTables.Add(string.Format("{0}.{1}", result.Object.PrimaryTable.Schema, result.Object.PrimaryTable.Name));

                #endregion

                foreach (string changedTable in changedTables)
                {
                    Node node = new Node(changedTable);
                    node.Tag = changedTable;
                    node.CheckBoxVisible = true;
                    node.Checked = true;
                    node.ImageIndex = IMG_CHANGED;
                    nodeModifiedEntities.Nodes.Add(node);

                    #region Columns
                    foreach (ColumnAdditionOperation newColumn in results.ColumnOperations.Where(r => r is ColumnAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Remove column from database: [{0}]", newColumn.Object.Name));
                        columnnode.Tag = newColumn;
                        node.Nodes.Add(columnnode);
                    }
                    foreach (ColumnChangeOperation changedColumn in results.ColumnOperations.Where(r => r is ColumnChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Update column in database [{0}]", changedColumn.Object.Name));
                        columnnode.Tag = changedColumn;
                        node.Nodes.Add(columnnode);

                        foreach (string d in changedColumn.Description.Split(','))
                            columnnode.Nodes.Add(new Node(d));
                    }
                    foreach (ColumnRemovalOperation removedColumn in results.ColumnOperations.Where(r => r is ColumnRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node columnnode = new Node(string.Format("Add column to database: [{0}]", removedColumn.Object.Name));
                        columnnode.Tag = removedColumn;
                        node.Nodes.Add(columnnode);
                    }
                    #endregion

                    #region Indexes
                    foreach (IndexAdditionOperation newIndex in results.IndexOperations.Where(r => r is IndexAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Remove index from database: [{0}]", newIndex.Object.Name));
                        indexNode.Tag = newIndex;
                        node.Nodes.Add(indexNode);
                    }
                    foreach (IndexChangeOperation changedIndex in results.IndexOperations.Where(r => r is IndexChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Update index in database [{0}]", changedIndex.Object.Name));
                        indexNode.Tag = changedIndex;
                        node.Nodes.Add(indexNode);

                        foreach (string d in changedIndex.Description.Split(','))
                            indexNode.Nodes.Add(new Node(d));
                    }
                    foreach (IndexRemovalOperation removedIndex in results.IndexOperations.Where(r => r is IndexRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node indexNode = new Node(string.Format("Add index to database: [{0}]", removedIndex.Object.Name));
                        indexNode.Tag = removedIndex;
                        node.Nodes.Add(indexNode);
                    }
                    #endregion

                    #region Keys
                    foreach (KeyAdditionOperation newKey in results.KeyOperations.Where(r => r is KeyAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Remove key from database: [{0}]", newKey.Object.Name));
                        keyNode.Tag = newKey;
                        node.Nodes.Add(keyNode);
                    }
                    foreach (KeyChangeOperation changedKey in results.KeyOperations.Where(r => r is KeyChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Update key in database [{0}]", changedKey.Object.Name));
                        keyNode.Tag = changedKey;
                        node.Nodes.Add(keyNode);

                        foreach (string d in changedKey.Description.Split(','))
                            keyNode.Nodes.Add(new Node(d));
                    }
                    foreach (KeyRemovalOperation removedKey in results.KeyOperations.Where(r => r is KeyRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.Parent.Schema, c.Object.Parent.Name) == changedTable))
                    {
                        Node keyNode = new Node(string.Format("Add key to database: [{0}]", removedKey.Object.Name));
                        keyNode.Tag = removedKey;
                        node.Nodes.Add(keyNode);
                    }
                    #endregion

                    #region Relationships
                    //foreach (RelationshipAdditionOperation newRelationship in results.RelationshipOperations.Where(r => r is RelationshipAdditionOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable).Distinct())
                    //{
                    //    Node relationshipNode = new Node(string.Format("Remove relationship from database, with {0}: [{1}]", newRelationship.Object.ForeignTable.Name, newRelationship.Object.Name));
                    //    relationshipNode.Tag = newRelationship;
                    //    node.Nodes.Add(relationshipNode);
                    //}
                    //foreach (RelationshipChangeOperation changedRelationship in results.RelationshipOperations.Where(r => r is RelationshipChangeOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    //{
                    //    Node relationshipNode = new Node(string.Format("Update relationship in database, with {0}:  [{1}]", changedRelationship.Object.ForeignTable.Name, changedRelationship.Object.Name));
                    //    relationshipNode.Tag = changedRelationship;
                    //    node.Nodes.Add(relationshipNode);

                    //    foreach (string d in changedRelationship.Description.Split(','))
                    //        relationshipNode.Nodes.Add(new Node(d));
                    //}
                    //foreach (RelationshipRemovalOperation removedRelationship in results.RelationshipOperations.Where(r => r is RelationshipRemovalOperation).Where(c => string.Format("{0}.{1}", c.Object.PrimaryTable.Schema, c.Object.PrimaryTable.Name) == changedTable))
                    //{
                    //    Node relationshipNode = new Node(string.Format("Add relationship to database, with {0}: [{1}]", removedRelationship.Object.ForeignTable.Name, removedRelationship.Object.Name));
                    //    relationshipNode.Tag = removedRelationship;
                    //    node.Nodes.Add(relationshipNode);
                    //}
                    #endregion
                }
                #endregion

                nodeNewEntities.Visible = nodeNewEntities.Nodes.Count > 0;
                nodeModifiedEntities.Visible = nodeModifiedEntities.Nodes.Count > 0;
                nodeRemovedEntities.Visible = nodeRemovedEntities.Nodes.Count > 0;

                if (!nodeNewEntities.Visible && !nodeModifiedEntities.Visible && !nodeRemovedEntities.Visible)
                {
                    nodeEmpty.Text = "The database has no changes";
                    nodeEmpty.Visible = true;
                }
                else
                    nodeEmpty.Visible = false;
            }
            finally
            {
                advTreeTables.EndUpdate();
            }
        }
Exemple #19
0
        public void SetDatabaseChanges(DatabaseMergeResult results)
        {
            var processor = new DBMergeResultProcessor(results);

            rtbChanges.Text = processor.GetTextResults();
        }
        public void FillChangedTables(
            IList<TableMatch> matches,
            DatabaseMergeResult results)
        {
            Matches.Clear();
            Matches = matches;
            TableRows.Clear();

            foreach (TableMatch match in Matches)
            {
                #region Columns
                IEnumerable<IColumn> removedColumns = results.ColumnOperations.Where(r => r is ColumnRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                IEnumerable<IColumn> addedColumns = results.ColumnOperations.Where(r => r is ColumnAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                IEnumerable<IColumn> changedColumns = results.ColumnOperations.Where(r => r is ColumnChangeOperation).Select(r => r.Object);
                List<ColumnMatch> columnMatches = new List<ColumnMatch>();

                foreach (var col in removedColumns)
                    columnMatches.Add(new ColumnMatch(null, col));

                foreach (var col in addedColumns)
                    columnMatches.Add(new ColumnMatch(col, null));

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                #region Keys
                IEnumerable<IKey> removedKeys = results.KeyOperations.Where(r => r is KeyRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                IEnumerable<IKey> addedKeys = results.KeyOperations.Where(r => r is KeyAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                IEnumerable<IKey> changedKeys = results.KeyOperations.Where(r => r is KeyChangeOperation).Select(r => r.Object);
                List<KeyMatch> keyMatches = new List<KeyMatch>();

                foreach (var key in removedKeys)
                    keyMatches.Add(new KeyMatch(null, key));

                foreach (var key in addedKeys)
                    keyMatches.Add(new KeyMatch(key, null));

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                #region Indexes
                //IEnumerable<IKey> removedKeys = results.KeyOperations.Where(r => r is KeyRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                //IEnumerable<IKey> addedKeys = results.KeyOperations.Where(r => r is KeyAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                //IEnumerable<IKey> changedKeys = results.KeyOperations.Where(r => r is KeyChangeOperation).Select(r => r.Object);
                List<IndexMatch> indexMatches = new List<IndexMatch>();

                //foreach (var key in removedKeys)
                //    keyMatches.Add(new KeyMatch(null, key));

                //foreach (var key in addedKeys)
                //    keyMatches.Add(new KeyMatch(key, null));

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                #region Relationships
                //IEnumerable<IKey> removedKeys = results.KeyOperations.Where(r => r is KeyRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                //IEnumerable<IKey> addedKeys = results.KeyOperations.Where(r => r is KeyAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                //IEnumerable<IKey> changedKeys = results.KeyOperations.Where(r => r is KeyChangeOperation).Select(r => r.Object);
                List<RelationshipMatch> relationshipMatches = new List<RelationshipMatch>();

                //foreach (var key in removedKeys)
                //    keyMatches.Add(new KeyMatch(null, key));

                //foreach (var key in addedKeys)
                //    keyMatches.Add(new KeyMatch(key, null));

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                TableRows.Add(new TableRow(match.ModelTable, match.DatabaseTable, this.Font, columnMatches, keyMatches, indexMatches, relationshipMatches));
            }
            //TableRows[2].TableExpanded = true;
        }
 public void Fill(DatabaseMergeResult results, IDatabase db1, IDatabase db2)
 {
     databaseChanges1.Fill(results, db1, db2);
 }
        public void FillChangedTables(
            IList <TableMatch> matches,
            DatabaseMergeResult results)
        {
            Matches.Clear();
            Matches = matches;
            TableRows.Clear();

            foreach (TableMatch match in Matches)
            {
                #region Columns
                IEnumerable <IColumn> removedColumns = results.ColumnOperations.Where(r => r is ColumnRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                IEnumerable <IColumn> addedColumns   = results.ColumnOperations.Where(r => r is ColumnAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                IEnumerable <IColumn> changedColumns = results.ColumnOperations.Where(r => r is ColumnChangeOperation).Select(r => r.Object);
                List <ColumnMatch>    columnMatches  = new List <ColumnMatch>();

                foreach (var col in removedColumns)
                {
                    columnMatches.Add(new ColumnMatch(null, col));
                }

                foreach (var col in addedColumns)
                {
                    columnMatches.Add(new ColumnMatch(col, null));
                }

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                #region Keys
                IEnumerable <IKey> removedKeys = results.KeyOperations.Where(r => r is KeyRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                IEnumerable <IKey> addedKeys   = results.KeyOperations.Where(r => r is KeyAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                IEnumerable <IKey> changedKeys = results.KeyOperations.Where(r => r is KeyChangeOperation).Select(r => r.Object);
                List <KeyMatch>    keyMatches  = new List <KeyMatch>();

                foreach (var key in removedKeys)
                {
                    keyMatches.Add(new KeyMatch(null, key));
                }

                foreach (var key in addedKeys)
                {
                    keyMatches.Add(new KeyMatch(key, null));
                }

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                #region Indexes
                //IEnumerable<IKey> removedKeys = results.KeyOperations.Where(r => r is KeyRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                //IEnumerable<IKey> addedKeys = results.KeyOperations.Where(r => r is KeyAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                //IEnumerable<IKey> changedKeys = results.KeyOperations.Where(r => r is KeyChangeOperation).Select(r => r.Object);
                List <IndexMatch> indexMatches = new List <IndexMatch>();

                //foreach (var key in removedKeys)
                //    keyMatches.Add(new KeyMatch(null, key));

                //foreach (var key in addedKeys)
                //    keyMatches.Add(new KeyMatch(key, null));

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                #region Relationships
                //IEnumerable<IKey> removedKeys = results.KeyOperations.Where(r => r is KeyRemovalOperation && r.Object.Parent == match.DatabaseTable).Select(r => r.Object);
                //IEnumerable<IKey> addedKeys = results.KeyOperations.Where(r => r is KeyAdditionOperation && r.Object.Parent == match.ModelTable).Select(r => r.Object);
                //IEnumerable<IKey> changedKeys = results.KeyOperations.Where(r => r is KeyChangeOperation).Select(r => r.Object);
                List <RelationshipMatch> relationshipMatches = new List <RelationshipMatch>();

                //foreach (var key in removedKeys)
                //    keyMatches.Add(new KeyMatch(null, key));

                //foreach (var key in addedKeys)
                //    keyMatches.Add(new KeyMatch(key, null));

                //foreach (var col in changedColumns)
                //    columnMatches.Add(new ColumnMatch(col, null));
                #endregion

                TableRows.Add(new TableRow(match.ModelTable, match.DatabaseTable, this.Font, columnMatches, keyMatches, indexMatches, relationshipMatches));
            }
            //TableRows[2].TableExpanded = true;
        }