Esempio n. 1
0
        public static async void ExecuteAnalysisAsync(Action onExecuted = null)
        {
            if (_dte.ActiveDocument.ActiveWindow == null)
            {
                return;
            }

            var scriptEditorControl = GetCurrentAnalysisWindowEditorControl();

            if (scriptEditorControl == null)
            {
                return;
            }

            var analysisServerResultsControl = RestoreAnalysisServerResultsControl(scriptEditorControl, showOriginalControls: false);

            try
            {
                var document  = (TextDocument)_dte.ActiveDocument.Object("TextDocument");
                var statement = (document.Selection.Text.Length > 0 ? document.Selection.Text : document.StartPoint.CreateEditPoint().GetText(document.EndPoint)).Trim();
                if (statement.Length == 0)
                {
                    return;
                }

                var server   = scriptEditorControl.Connection.ServerName;
                var database = scriptEditorControl.Connection.AdvancedOptions.Get("DATABASE");

                LogoPanel.SetMode(scriptEditorControl, LogoPanel.PanelMode.Live);

                using (var client = new SSASQueryAnalyzerClient(server, database))
                {
                    using (var config = await client.GetConfigurationForTraceEventsAsync())
                        ValidateLiveAnalysisSettings(config);

                    client.DebugToXml = Settings.Default.DebugEnabled;
                    client.ExecutionProgressControlEnabled            = true;
                    client.ExecutionProgressControl.ActivitiesEnabled = Settings.Default.ExecutionProgressActivitiesEnabled;
                    client.ExecutionProgressControl.TitleMessage      = "Live";

                    analysisServerResultsControl.ResizeFor(client.ExecutionProgressControl);
                    analysisServerResultsControl.Controls.Add(client.ExecutionProgressControl);

                    var analyzerStatistics = await client.AnalyzeAsync(statement, queryResultRowLimit : Settings.Default.MaxRowsReturned);

                    {
                        LogoPanel.SetValues(scriptEditorControl,
                                            columns: analyzerStatistics.ColdCacheExecutionResult.QueryResults.Columns.Count,
                                            rows: analyzerStatistics.ColdCacheExecutionResult.QueryResults.Rows.Count
                                            );

                        var control = client.BuildResultControl(analyzerStatistics);

                        analysisServerResultsControl.ResizeFor(control);
                        analysisServerResultsControl.Controls.Add(control);
                    }
                }

                onExecuted?.Invoke();
            }
            catch (Exception ex)
            {
                analysisServerResultsControl.Controls.Add(CustomErrorControl.CreateFromException(ex));
            }
        }