コード例 #1
0
        public void MoveColumnFromRemovedTableTest()
        {
            var storage = CreateSimpleStorageModel();

            TestUpdate(storage, (s1, s2, hs) => {
                var oldColumn = s1.Tables["Types"].Columns["Data"];
                s2.Tables["Objects"].ForeignKeys.Clear();
                s2.Tables["Types"].Remove();
                var newColumn = new ColumnInfo(s2.Tables["Objects"], "Data", oldColumn.Type);
                RepopulateValueColumns(s1, "Types");
                RepopulateValueColumns(s2, "Objects");

                var copyDataHint = new CopyDataHint(
                    "Tables/Types",
                    new List <IdentityPair> {
                    new IdentityPair("Tables/Types/Columns/Id", "Tables/Objects/Columns/TypeId", false)
                },
                    new List <Pair <string> > {
                    new Pair <string>("Tables/Types/Columns/Data", "Tables/Objects/Columns/Data")
                });

                hs.Add(copyDataHint);
            },
                       (diff, actions) => { });
        }
コード例 #2
0
        public void ComplexTest()
        {
            var storage = CreateSimpleStorageModel();

            TestUpdate(storage, (s1, s2, hs) => {
                var oldColumn = s1.Tables["Types"].Columns["Data"];
                s2.Tables["Types"].Remove();
                s2.Tables["Objects"].ForeignKeys[0].Remove();
                s2.Tables["Objects"].Name = "NewObjects";
                s2.Tables["NewObjects"].Columns["Id"].Name = "NewId";
                var newColumn = new ColumnInfo(s2.Tables["NewObjects"], "NewData", oldColumn.Type);
                s2.Tables["NewObjects"].PrimaryIndex.ValueColumns.Clear();
                s2.Tables["NewObjects"].PrimaryIndex.PopulateValueColumns();

                hs.Add(new RenameHint(s1.Tables["Objects"].Path,
                                      s2.Tables["NewObjects"].Path));
                hs.Add(new RenameHint(s1.Tables["Objects"].Columns["Id"].Path,
                                      s2.Tables["NewObjects"].Columns["NewId"].Path));
                var copyDataHint = new CopyDataHint(
                    "Tables/Types",
                    new List <IdentityPair> {
                    new IdentityPair("Tables/Types/Columns/Id", "Tables/NewObjects/Columns/TypeId", false)
                },
                    new List <Pair <string> > {
                    new Pair <string>("Tables/Types/Columns/Data", "Tables/NewObjects/Columns/NewData")
                });

                hs.Add(copyDataHint);
            },
                       (diff, actions) => { });
        }
コード例 #3
0
        public void MoveColumnTest()
        {
            var storage = CreateSimpleStorageModel();

            TestUpdate(storage, (s1, s2, hs) => {
                new ColumnInfo(s1.Tables["Types"], "ColumnToRemove", new TypeInfo(typeof(int)));
                var oldColumn = s1.Tables["Types"].Columns["Data"];
                ((Node)s2.Resolve(oldColumn.Path)).Remove();
                var newColumn = new ColumnInfo(s2.Tables["Objects"], "Data", oldColumn.Type);
                RepopulateValueColumns(s1, "Types");
                RepopulateValueColumns(s2, "Types");
                RepopulateValueColumns(s2, "Objects");

                var copyDataHint = new CopyDataHint(
                    "Tables/Types",
                    new List <IdentityPair> {
                    new IdentityPair("Tables/Types/Columns/Id", "Tables/Objects/Columns/TypeId", false)
                },
                    new List <Pair <string> > {
                    new Pair <string>("Tables/Types/Columns/Data", "Tables/Objects/Columns/Data")
                });

                hs.Add(copyDataHint);
            },
                       (diff, actions) => { });
        }
コード例 #4
0
        private void UpdateHints()
        {
            var originalHints = Hints;

            Hints = new HintSet(CurrentModel, TargetModel);

            // Process RenameHints
            foreach (var renameHint in originalHints.OfType <RenameHint>())
            {
                if (TemporaryRenames.TryGetValue(renameHint.SourcePath, out var sourceNode))
                {
                    Hints.Add(new RenameHint(sourceNode.Path, renameHint.TargetPath));
                }
                else
                {
                    Hints.Add(renameHint);
                }
            }

            // Process CopyDataHints
            foreach (var copyDataHint in originalHints.OfType <CopyDataHint>())
            {
                var sourceTablePath = GetActualPath(copyDataHint.SourceTablePath);
                var identities      = copyDataHint.Identities.Select(pair =>
                                                                     new IdentityPair(GetActualPath(pair.Source), pair.Target, pair.IsIdentifiedByConstant))
                                      .ToList();
                var copiedColumns = copyDataHint.CopiedColumns.Select(pair =>
                                                                      new Pair <string>(GetActualPath(pair.First), pair.Second))
                                    .ToList();
                var newCopyDataHint = new CopyDataHint(sourceTablePath, identities, copiedColumns);
                Hints.Add(newCopyDataHint);
            }

            // Process DeleteDataHints
            foreach (var deleteDataHint in originalHints.OfType <DeleteDataHint>())
            {
                if (!deleteDataHint.PostCopy)
                {
                    continue; // It's not necessary to copy this hint
                }

                var sourceTablePath = GetActualPath(deleteDataHint.SourceTablePath);
                var identities      = deleteDataHint.Identities.Select(pair =>
                                                                       new IdentityPair(GetActualPath(pair.Source), pair.Target, pair.IsIdentifiedByConstant))
                                      .ToList();
                var newDeleteDataHint = new DeleteDataHint(sourceTablePath, identities, true);
                Hints.Add(newDeleteDataHint);
            }

            // Process IgnoreHints
            foreach (var ignoreHint in originalHints.OfType <IgnoreHint>())
            {
                Hints.Add(ignoreHint);
            }
        }