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) => { }); }
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) => { }); }
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) => { }); }
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); } }