示例#1
0
        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));
            //}
        }
示例#2
0
        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));
            //}
        }