void lrom_DoWorkViewDependencies(object sender, DoWorkEventArgs e) { BwObject bwo = (BwObject)e.Argument; LongRunningOperationManager.StartNextStep(); mySqlServer1.Load(bwo.IsForceReload); //inMemoryDatabase1.Load(bwo.CheckedDatabases, bwo.IsForceReload); // if (LongRunningOperationManager.CancellationPending) { e.Cancel = true; return; } // LongRunningOperationManager.StartNextStep(); DependencyBrowserDockForm dbdf = new DependencyBrowserDockForm(ref mySqlServer1, bwo.SearchObjectFullDescription, bwo.ObjectTypes, bwo.IsTopDownDiscovery, this._windowId++); dbdf.LoadDependencies(bwo.ObjectName, bwo.ObjectTypes, bwo.IsTopDownDiscovery, bwo.MatchMethod, bwo.IsForceReload, bwo.SearchDatabases); // if (LongRunningOperationManager.CancellationPending) { e.Cancel = true; return; } // LongRunningOperationManager.StartNextStep(); dbdf.DrawObjects(); if (dbdf.RecommendedDatabases.Count > 0) { var v1 = dbdf.RecommendedDatabases.Select(d => d.Value.ToString().ToUpper()).ToArray(); var v2 = mySqlServer1.SqlDatabases.Select(d => d.ToString().ToUpper()).ToArray(); var v3 = v1.Except(v2); if (v3 != null && v3.Any()) { var v4 = from rd in dbdf.RecommendedDatabases.AsEnumerable() where v3.Contains(rd.Value.ToString().ToUpper()) select rd; new InvalidDatabaseReferencesForm(v4.ToArray()).ShowDialog(); } MySqlDatabase[] recommendedDatabasesWithAllAttributesSet = dbdf.RecommendedDatabases.Select( db => //this.DatabaseBrowserDockForm.AllDatabases.First( mySqlServer1.SqlDatabases.FirstOrDefault( db1 => db1.ServerObjectName.Equals(db.Value.ServerObjectName, StringComparison.InvariantCultureIgnoreCase) && db1.DatabaseName.Equals(db.Value.DatabaseName, StringComparison.InvariantCultureIgnoreCase))) .Where(db => db != null).ToArray(); string missingDbs = string.Join(", ", recommendedDatabasesWithAllAttributesSet.Select(db => "[" + db.DatabaseName + "]").Distinct()); string missingDbsText = string.Format("Results might be incomplete! Include database{0} " + missingDbs + " to get more accurate results.", (recommendedDatabasesWithAllAttributesSet.Length == 1) ? string.Empty : "s"); dbdf.SetInfo(missingDbsText, Resources.StatusAnnotations_Warning_16xLG_color); var f = new RecommendedDatabasesForm(recommendedDatabasesWithAllAttributesSet); if (f.ShowDialog() == DialogResult.OK) { e.Result = new DependencyBackgroundWorkerResult { ResultType = EResultType.RERUN, ResultObject = f.CheckedRecommendedDatabases }; } else { e.Result = new DependencyBackgroundWorkerResult { ResultType = EResultType.SHOW_RESULTS, ResultObject = dbdf }; } } else { e.Result = new DependencyBackgroundWorkerResult { ResultType = EResultType.SHOW_RESULTS, ResultObject = dbdf } }; } void lrom_ViewDependenciesCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { return; } if (e.Result.GetType().IsAssignableFrom(typeof(DependencyBackgroundWorkerResult))) { var res = ((DependencyBackgroundWorkerResult)e.Result); if (res.ResultType == EResultType.SHOW_RESULTS) { var d = ((DependencyBrowserDockForm)res.ResultObject); if (d.AreDependenciesInitialized) { d.Show(this.dockPanel, DockState.Document); d.AutoResizeColumns(); } } else if (res.ResultType == EResultType.RERUN) { MySqlDatabase[] checkedRecommendedDatabases = new MySqlDatabase[((List <MySqlDatabase>)res.ResultObject).Count]; ((List <MySqlDatabase>)res.ResultObject).CopyTo(checkedRecommendedDatabases); this.DatabaseBrowserDockForm.CheckDatabases(checkedRecommendedDatabases.Select(db => mySqlServer1.SqlDatabases.First(db1 => db1.ServerObjectName.Equals(db.ServerObjectName, StringComparison.InvariantCultureIgnoreCase) && db1.DatabaseName.Equals(db.DatabaseName, StringComparison.InvariantCultureIgnoreCase))).ToArray()); } } /* * if (d.RecommendedDatabases.Count > 0) * { * var recommendedDatabasesCleaned = * d.RecommendedDatabases.Select( * db => * this.DatabaseBrowserDockForm.AllDatabases.First( * db1 => * db1.ServerName.Equals(db.ServerName, StringComparison.InvariantCultureIgnoreCase) && * db1.DatabaseName.Equals(db.DatabaseName, StringComparison.InvariantCultureIgnoreCase))) * .ToArray(); * * string missingDbs = string.Join(", ", recommendedDatabasesCleaned.Select(db => "[" + db.DatabaseName + "]").Distinct()); * string missingDbsText = string.Format("Results might be incomplete! Include database{0} " + missingDbs + " to get more accurate results.", (recommendedDatabasesCleaned.Length == 1) ? string.Empty : "s"); * d.SetInfo(missingDbsText, Resources.StatusAnnotations_Warning_16xLG_color); * * var f = new RecommendedDatabasesForm(recommendedDatabasesCleaned); * if (f.ShowDialog() == DialogResult.OK) * { * this.DatabaseBrowserDockForm.CheckDatabases(f.CheckedRecommendedDatabases.Select(db => this.DatabaseBrowserDockForm.AllDatabases.First(db1 => db1.ServerName.Equals(db.ServerName, StringComparison.InvariantCultureIgnoreCase) && db1.DatabaseName.Equals(db.DatabaseName, StringComparison.InvariantCultureIgnoreCase))).ToArray()); * * d.Close(); * //newDependencyCheck(sender, e); * } * } * */ }
public void newDependencyCheck(object sender, EventArgs e) { bool useWizard = sender.ToString().Contains("Wizard"); if (mySqlServer1.ConnectionPool.GetConnection(0).State == ConnectionState.Open && mySqlServer1.SqlCheckedDatabases.Any()) { NewDependencyCheckForm ndcf = null; NewDependencyCheckWizard ndcw = null; if (sender.ToString().Contains("Wizard")) { ndcw = new NewDependencyCheckWizard(mySqlServer1.SqlCheckedDatabases); } else { ndcf = new NewDependencyCheckForm(); } if ((!useWizard && ndcf.ShowDialog() == DialogResult.OK) || (useWizard && ndcw.ShowDialog() == DialogResult.OK)) { if (!LongRunningOperationManager.IsBusy) { do { LongRunningOperationManager.NewOperationBatch(true, true, new[] { new LongRunningOperation("Initializing objects and dependencies", 0.45), new LongRunningOperation("Searching for dependencies", 0.45), new LongRunningOperation("Drawing objects", 0.10) }); string[] objTypes = (useWizard) ? ndcw.ObjectTypes : null; string objName = (useWizard) ? ndcw.ObjectName : ndcf.ObjectName; bool topDown = (useWizard) ? ndcw.IsTopDownDiscovery : ndcf.IsTopDownDiscovery; EMatchMethod mm = (useWizard) ? ndcw.MatchMethod : EMatchMethod.Contains; bool forceInternalDbReload = (useWizard) ? ndcw.IsForceReload : false; string title = (useWizard) ? ndcw.SearchObjectFullDescription : ndcf.SearchObjectFullDescription; MySqlDatabase[] searchDbs = (useWizard) ? ndcw.SearchDatabases : null; BwObject bwo = new BwObject { CheckedDatabases = mySqlServer1.SqlCheckedDatabases, ObjectTypes = objTypes, ObjectName = objName, IsTopDownDiscovery = topDown, MatchMethod = mm, IsForceReload = forceInternalDbReload, SearchDatabases = searchDbs, SearchObjectFullDescription = title }; LongRunningOperationManager.DoWork += lrom_DoWorkViewDependencies; LongRunningOperationManager.WorkCompleted += lrom_ViewDependenciesCompleted; LongRunningOperationManager.RunAsync(bwo); }while (LongRunningOperationManager.ProcessResult != null && ((DependencyBackgroundWorkerResult)LongRunningOperationManager.ProcessResult).ResultType == EResultType.RERUN); } else { MessageBox.Show("Please wait for background process to finish."); } } } else { if (mySqlServer1.ConnectionPool.GetConnection(0).State != ConnectionState.Open) { MessageBox.Show("Please connect to SQL Server and then select at least one database from the list to search for dependencies.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); } if (mySqlServer1.ConnectionPool.GetConnection(0).State == ConnectionState.Open && !mySqlServer1.SqlCheckedDatabases.Any()) { MessageBox.Show("Please select at least one database from the list to search for dependencies.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } }