static void Work(Argument arguments) { try { DBDiff.Schema.SQLServer.Generates.Model.Database origen; DBDiff.Schema.SQLServer.Generates.Model.Database destino; if (TestConnection(arguments.ConnectionString1, arguments.ConnectionString2)) { Generate sql = new Generate(); SqlOption opt = new SqlOption(true); opt.Ignore.FilterSchema = false; opt.Ignore.FilterUsers = false; opt.Ignore.FilterTableFileGroup = false; sql.Options = opt; sql.ConnectionString = arguments.ConnectionString1; System.Console.WriteLine("Reading first database..."); //sql.Options = SqlFilter; origen = sql.Process(); sql.ConnectionString = arguments.ConnectionString2; System.Console.WriteLine("Reading second database..."); destino = sql.Process(); System.Console.WriteLine("Comparing databases schemas..."); origen = Generate.Compare(origen, destino); System.Console.WriteLine("Generating SQL file..."); SaveFile(arguments.OutputFile, origen.ToSql()); } } catch (Exception ex) { System.Console.WriteLine(ex.Message); } }
static bool Work(Argument arguments) { bool completedSuccessfully = false; try { DBDiff.Schema.SQLServer.Generates.Model.Database origen; DBDiff.Schema.SQLServer.Generates.Model.Database destino; if (TestConnection(arguments.ConnectionString1, arguments.ConnectionString2)) { Generate sql = new Generate(); sql.ConnectionString = arguments.ConnectionString1; System.Console.WriteLine("Reading first database..."); sql.Options = SqlFilter; origen = sql.Process(); sql.ConnectionString = arguments.ConnectionString2; System.Console.WriteLine("Reading second database..."); destino = sql.Process(); System.Console.WriteLine("Comparing databases schemas..."); origen = Generate.Compare(origen, destino); System.Console.WriteLine("Generating SQL file..."); SaveFile(arguments.OutputFile, arguments.OutputAll ? origen.ToSql() : origen.ToSqlDiff().ToSQL()); completedSuccessfully = true; } } catch (Exception ex) { System.Console.WriteLine(String.Format("{0}\r\n{1}\r\n\r\nPlease report this issue at http://opendbiff.codeplex.com/workitem/list/basic\r\n\r\n", ex.Message, ex.StackTrace)); } return completedSuccessfully; }
public Model BuildComparisonObjects(IConnection sourceConnection, IConnection targetConnection) { SqlOption options = BuildOptions(); OnComparisonStarted(EventArgs.Empty); var source = new Generate {ConnectionString = sourceConnection.ConnectionString, Options = options}; source.OnProgress += args => OnFeedbackMessage(new FeedbackEventArgs { Message = args.Message, ProgressPercent = args.Progress*(40/Generate.MaxValue) }); _source = source.Process(); var target = new Generate {ConnectionString = targetConnection.ConnectionString, Options = options}; target.OnProgress += args => OnFeedbackMessage(new FeedbackEventArgs { Message = args.Message, ProgressPercent = 40 + (args.Progress*(40/Generate.MaxValue)) }); _target = target.Process(); OnFeedbackMessage(new FeedbackEventArgs {Message = "Running comparison...", ProgressPercent = 90}); _merged = Generate.Compare((Database) _target.Clone(null), _source); OnFeedbackMessage(new FeedbackEventArgs {Message = "Building Model...", ProgressPercent = 95}); var model = new Model(); _merged.Tables.ForEach( item => model.Add("Table", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Views.ForEach( item => model.Add("View", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Users.ForEach( item => model.Add("User", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.UserTypes.ForEach( item => model.Add("User Type", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.XmlSchemas.ForEach( item => model.Add("XML Schema", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Assemblies.ForEach( item => model.Add("CLR Assemblie", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.CLRFunctions.ForEach( item => model.Add("CLR Function", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.CLRProcedures.ForEach( item => model.Add("CLR Procedure", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.DDLTriggers.ForEach( item => model.Add("DDL Trigger", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Defaults.ForEach( item => model.Add("Default", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.ExtendedProperties.ForEach( item => model.Add("Extended Property", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.FileGroups.ForEach( item => model.Add("File Groups", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Functions.ForEach( item => model.Add("Functions", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.PartitionFunctions.ForEach( item => model.Add("Partition Function", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.PartitionSchemes.ForEach( item => model.Add("Partition Scheme", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Procedures.ForEach( item => model.Add("Stored Procedure", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Roles.ForEach( item => model.Add("Role", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Schemas.ForEach( item => model.Add("Schema", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); _merged.Synonyms.ForEach( item => model.Add("Synonym", item.FullName, new Guid(item.Guid), item.Id, ResolveAction(item.Status))); OnFeedbackMessage(new FeedbackEventArgs {Message = "Comparison Complete", ProgressPercent = 100}); OnComparisonCompleted(EventArgs.Empty); return model; }