Esempio n. 1
0
        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);
             *  }
             * }
             * */
        }
Esempio n. 2
0
        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);
                }
            }
        }