private bool synchronize(BackgroundWorker worker, List <WorkspaceBase> workspaces, List <TableWorkspace> dataSpaces, List <TableWorkspace> truncDelete)
        {
            var sync = new SynchronizationHelper();

            sync.DisplayMessage += delegate(object sender, Common.PromptEventArgs e)
            {
                MessageBox.Show("Failed to synchronize: " + e.Message);
            };
            return(sync.Synchronize(_compareHelper, workspaces, dataSpaces, truncDelete, worker));
        }
Beispiel #2
0
        private void btnGo_Click(object sender, EventArgs e)
        {
            var sb = getMissingDependencyString();

            if (sb.Length > 0)
            {
                MessageBox.Show(sb.ToString(), "Dependencies");
                return;
            }


            var dropSpaces = (gridDropObjects.DataSource as BindingList <DropWorkspace>)
                             .Where(t => t.Select).ToList();

            var structureSpaces = (gridTables.DataSource as BindingList <TableWorkspace>)
                                  .Where(t => t.Select).ToList();

            var dataSpaces = (gridTables.DataSource as BindingList <TableWorkspace>)
                             .Where(t => t.SelectTableForData).ToList();

            var truncDelete = (gridTables.DataSource as BindingList <TableWorkspace>)
                              .Where(t => t.Truncate || t.Delete).ToList();

            var objSpaces = gridObjects.DataSource == null ? new List <ObjectWorkspace>() : (gridObjects.DataSource as BindingList <ObjectWorkspace>)
                            .Where(p => p.Select).ToList();

            var changes = dropSpaces.Select(t => t.TargetObject.Description + " - Drop").Union(
                structureSpaces.Where(t => t.TargetObject != null).Select(t => t.TargetObject + " - Alter")
                ).Union(
                structureSpaces.Where(t => t.TargetObject == null).Select(t => t.SourceObject + " - Create")
                ).Union(
                dataSpaces.Select(t => (t.TargetObject == null ? t.SourceObject : t.TargetObject) + " - Data")
                ).Union(
                truncDelete.Select(t => (t.TargetObject == null ? t.SourceObject : t.TargetObject) + " - Truncate/Delete")
                ).Union(
                objSpaces.Select(t => t.SourceObject + " - " + t.SourceObject.ObjectType)
                ).ToList();

            if (changes.Count() > 15)
            {
                changes = changes.Take(15).ToList();
                changes.Add("...");
            }

            if (MessageBox.Show(string.Format("{0} - {1} will be changed:\r\n\r\n{2}\r\n\r\nContinue?", _compareHelper.ToDatabase.DataSource,
                                              _compareHelper.ToDatabase.DatabaseName,
                                              string.Join("\r\n", changes.ToArray())), "Proceed", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes)
            {
                return;
            }


            if (!dropSpaces.Any() && !structureSpaces.Any() && !dataSpaces.Any() && !objSpaces.Any() && !truncDelete.Any())
            {
                MessageBox.Show("Nothing to synchronize.");
                return;
            }

            List <WorkspaceBase> workspaces = new List <WorkspaceBase>();

            if (structureSpaces.Any())
            {
                workspaces.AddRange(structureSpaces);
            }

            if (objSpaces.Any())
            {
                workspaces.AddRange(objSpaces);
            }

            if (dropSpaces.Any())
            {
                workspaces.AddRange(dropSpaces);
            }

            bool success = false;
            var  worker  = new BackgroundWorker();

            worker.WorkerReportsProgress      = true;
            worker.WorkerSupportsCancellation = true;
            worker.DoWork += delegate(object sender2, DoWorkEventArgs e2)
            {
                success = SynchronizationHelper.Synchronize(_compareHelper, workspaces, dataSpaces, truncDelete, worker);
            };

            PaJaMa.WinControls.WinProgressBox.ShowProgress(worker, allowCancel: true, progressBarStyle: ProgressBarStyle.Marquee);

            if (success)
            {
                MessageBox.Show("Done");
                refreshPage(true);
            }
        }
Beispiel #3
0
        public static bool ProcessArguments(string[] args)
        {
            try
            {
                bool somethingProcessed = true;
                for (int i = 0; i < args.Length - 1; i++)
                {
                    var arg = args[i];
                    if (arg == "-c")
                    {
                        var fileName           = args[i + 1];
                        var compareWorkspace   = PaJaMa.Common.XmlSerialize.DeserializeObjectFromFile <CompareWorkspace>(fileName);
                        var selectedWorkspaces = compareWorkspace.SelectedTableWorkspaces.Where(ws => ws.SelectTableForData)
                                                 .ToList();

                        if (selectedWorkspaces.Any())
                        {
                            var compareHelper = new CompareHelper(compareWorkspace.FromConnectionString, compareWorkspace.ToConnectionString, null);
                            List <TableWorkspace> workspaces = new List <TableWorkspace>();
                            foreach (var ws in selectedWorkspaces)
                            {
                                var fromTbl = from s in compareHelper.FromDatabase.Schemas
                                              from t in s.Tables
                                              where t.ToString() == ws.SourceSchemaTableName
                                              select t;
                                var toTbl = from s in compareHelper.ToDatabase.Schemas
                                            from t in s.Tables
                                            where t.ToString() == ws.TargetSchemaTableName
                                            select t;

                                workspaces.Add(new TableWorkspace(compareHelper, fromTbl.First(), toTbl.First())
                                {
                                    SelectTableForData = ws.SelectTableForData,
                                    KeepIdentity       = ws.KeepIdentity,
                                    RemoveAddIndexes   = ws.RemoveAddIndexes,
                                    RemoveAddKeys      = ws.RemoveAddKeys,
                                    Truncate           = ws.Truncate
                                });
                            }
                            //using (var conn = new SqlConnection(compareWorkspace.ToConnectionString))
                            //{
                            //	conn.Open();
                            //	using (var trans = conn.BeginTransaction())
                            //	{
                            //		try
                            //		{
                            // new TransferHelper(new BackgroundWorker() { WorkerReportsProgress = true }).Transfer(workspaces, trans, compareWorkspace.FromConnectionString);
                            //compareHelper.Synchronize(new BackgroundWorker() { WorkerReportsProgress = true }, workspaces
                            //	.Select(ws => (WorkspaceBase)ws).ToList(), trans);
                            SynchronizationHelper.Synchronize(compareHelper, new List <WorkspaceBase>(),
                                                              workspaces, workspaces.Where(ws => ws.Truncate).ToList(), new BackgroundWorker()
                            {
                                WorkerReportsProgress = true
                            });
                            //			trans.Commit();
                            //		}
                            //		catch
                            //		{
                            //			trans.Rollback();
                            //			throw;
                            //		}
                            //	}
                            //	conn.Close();
                            //	SqlConnection.ClearAllPools();
                            //}
                        }
                        somethingProcessed = true;
                        i++;
                    }
                }
                return(somethingProcessed);
            }
            catch
            {
                //  TODO: log?
                return(false);
            }
        }