public static AlterPlan PlanAlterTable(TableInfo oldTable, TableInfo newTable, DbDiffOptions opts, DatabaseInfo currentStructure) { AlterPlan plan = new AlterPlan(currentStructure); if (oldTable == null) { plan.CreateTable(newTable); } else { DbObjectPairing pairing = CreateTablePairing(oldTable, newTable); AlterTable(plan, oldTable, newTable, opts, pairing); } return(plan); }
public static AlterPlan PlanAlterTable(TableInfo oldTable, TableInfo newTable, DbDiffOptions opts, DatabaseInfo currentStructure) { AlterPlan plan = new AlterPlan(currentStructure); if (oldTable == null) { plan.CreateTable(newTable); } else { DbObjectPairing pairing = CreateTablePairing(oldTable, newTable); AlterTable(plan, oldTable, newTable, opts, pairing); } return plan; }
public static void AlterDatabase(AlterPlan plan, DbObjectPairing pairing, DbDiffOptions opts) { var src = pairing.Source; var dst = pairing.Target; //var caps = proc.AlterCaps; //// domains //foreach (IDomainStructure dsrc in src.Domains) //{ // IDomainStructure ddst = pairing.FindPair(dsrc); // if (ddst == null) // { // plan.DropDomain(dsrc); // } // else if (!DbDiffTool.EqualDomains(dsrc, ddst, opts, true)) // { // if (DbDiffTool.EqualDomains(dsrc, ddst, opts, false)) // { // plan.RenameDomain(dsrc, ddst.FullName); // } // else // { // plan.ChangeDomain(dsrc, ddst); // } // } //} //foreach (IDomainStructure ddst in dst.Domains) //{ // if (!pairing.IsPaired(ddst)) plan.CreateDomain(ddst); //} // drop tables foreach (TableInfo tsrc in new List<TableInfo>(src.Tables)) { TableInfo tdst = pairing.FindPair(tsrc); if (tdst == null) { plan.DropTable(tsrc); } } // change tables foreach (TableInfo tsrc in new List<TableInfo>(src.Tables)) { TableInfo tdst = pairing.FindPair(tsrc); if (tdst == null) continue; if (!DbDiffTool.EqualTables(tsrc, tdst, opts, pairing)) { DbDiffTool.AlterTable(plan, tsrc, tdst, opts, pairing); } //else //{ // DbDiffTool.AlterFixedData(plan, tsrc, tdst, opts); //} } // create tables foreach (TableInfo tdst in dst.Tables) { if (!pairing.IsPaired(tdst)) { //var script = DbDiffTool.AlterFixedData(null, tdst.FixedData, null, opts); plan.CreateTable(tdst); //if (script != null) plan.UpdateData(tdst.FullName, script); } } // specific objects foreach (var osrc in src.GetAllSpecificObjects()) { //var repr = SpecificRepresentationAddonType.Instance.FindRepresentation(osrc.ObjectType); //if (!repr.UseInSynchronization) continue; var odst = pairing.FindPair(osrc); if (odst == null) { plan.DropSpecificObject(osrc); //proc.DropSpecificObject(osrc); } else if (!DbDiffTool.EqualsSpecificObjects(osrc, odst, opts)) { DbDiffTool.AlterSpecificObject(osrc, odst, plan, opts, pairing); } } foreach (var odst in dst.GetAllSpecificObjects()) { //var repr = SpecificRepresentationAddonType.Instance.FindRepresentation(odst.ObjectType); //if (!repr.UseInSynchronization) continue; if (!pairing.IsPaired(odst)) { plan.CreateSpecificObject(odst); //proc.CreateSpecificObject(odst); } } //foreach (ISchemaStructure ssrc in src.Schemata) //{ // ISchemaStructure sdst = pairing.FindPair(ssrc); // if (sdst == null) // { // plan.DropSchema(ssrc); // } // else if (ssrc.SchemaName != sdst.SchemaName) // { // plan.RenameSchema(ssrc, sdst.SchemaName); // //if (caps.RenameSchema) proc.RenameSchema(ssrc, sdst.SchemaName); // //else // //{ // // proc.DropSchema(ssrc); // // proc.CreateSchema(sdst); // //} // } //} //foreach (ISchemaStructure sdst in dst.Schemata) //{ // if (!pairing.IsPaired(sdst)) plan.CreateSchema(sdst); //} //var alteredOptions = GetDatabaseAlteredOptions(src, dst, opts); //if (alteredOptions.Count > 0) plan.ChangeDatabaseOptions(null, alteredOptions); //if (opts.SchemaMode == DbDiffSchemaMode.Ignore) //{ // plan.RunNameTransformation(new SetSchemaNameTransformation(null)); //} }
public static void AlterDatabase(AlterPlan plan, DbObjectPairing pairing, DbDiffOptions opts) { var src = pairing.Source; var dst = pairing.Target; //var caps = proc.AlterCaps; //// domains //foreach (IDomainStructure dsrc in src.Domains) //{ // IDomainStructure ddst = pairing.FindPair(dsrc); // if (ddst == null) // { // plan.DropDomain(dsrc); // } // else if (!DbDiffTool.EqualDomains(dsrc, ddst, opts, true)) // { // if (DbDiffTool.EqualDomains(dsrc, ddst, opts, false)) // { // plan.RenameDomain(dsrc, ddst.FullName); // } // else // { // plan.ChangeDomain(dsrc, ddst); // } // } //} //foreach (IDomainStructure ddst in dst.Domains) //{ // if (!pairing.IsPaired(ddst)) plan.CreateDomain(ddst); //} // drop tables foreach (TableInfo tsrc in new List <TableInfo>(src.Tables)) { TableInfo tdst = pairing.FindPair(tsrc); if (tdst == null) { plan.DropTable(tsrc); } } // change tables foreach (TableInfo tsrc in new List <TableInfo>(src.Tables)) { TableInfo tdst = pairing.FindPair(tsrc); if (tdst == null) { continue; } if (!DbDiffTool.EqualTables(tsrc, tdst, opts, pairing)) { DbDiffTool.AlterTable(plan, tsrc, tdst, opts, pairing); } //else //{ // DbDiffTool.AlterFixedData(plan, tsrc, tdst, opts); //} } // create tables foreach (TableInfo tdst in dst.Tables) { if (!pairing.IsPaired(tdst)) { //var script = DbDiffTool.AlterFixedData(null, tdst.FixedData, null, opts); plan.CreateTable(tdst); //if (script != null) plan.UpdateData(tdst.FullName, script); } } // specific objects foreach (var osrc in src.GetAllSpecificObjects()) { //var repr = SpecificRepresentationAddonType.Instance.FindRepresentation(osrc.ObjectType); //if (!repr.UseInSynchronization) continue; var odst = pairing.FindPair(osrc); if (odst == null) { plan.DropSpecificObject(osrc); //proc.DropSpecificObject(osrc); } else if (!DbDiffTool.EqualsSpecificObjects(osrc, odst, opts)) { DbDiffTool.AlterSpecificObject(osrc, odst, plan, opts, pairing); } } foreach (var odst in dst.GetAllSpecificObjects()) { //var repr = SpecificRepresentationAddonType.Instance.FindRepresentation(odst.ObjectType); //if (!repr.UseInSynchronization) continue; if (!pairing.IsPaired(odst)) { plan.CreateSpecificObject(odst); //proc.CreateSpecificObject(odst); } } //foreach (ISchemaStructure ssrc in src.Schemata) //{ // ISchemaStructure sdst = pairing.FindPair(ssrc); // if (sdst == null) // { // plan.DropSchema(ssrc); // } // else if (ssrc.SchemaName != sdst.SchemaName) // { // plan.RenameSchema(ssrc, sdst.SchemaName); // //if (caps.RenameSchema) proc.RenameSchema(ssrc, sdst.SchemaName); // //else // //{ // // proc.DropSchema(ssrc); // // proc.CreateSchema(sdst); // //} // } //} //foreach (ISchemaStructure sdst in dst.Schemata) //{ // if (!pairing.IsPaired(sdst)) plan.CreateSchema(sdst); //} //var alteredOptions = GetDatabaseAlteredOptions(src, dst, opts); //if (alteredOptions.Count > 0) plan.ChangeDatabaseOptions(null, alteredOptions); //if (opts.SchemaMode == DbDiffSchemaMode.Ignore) //{ // plan.RunNameTransformation(new SetSchemaNameTransformation(null)); //} }