public void ValidateFormatSettingsParsedFromJson()
        {
            const string settingsJson = @"
{
    ""params"": {
        ""mssql"": {
            ""format"": {
                useBracketForIdentifiers: true,
                placeCommasBeforeNextStatement: true,
                placeSelectStatementReferencesOnNewLine: true,
                keywordCasing: ""uppercase"",
                datatypeCasing: ""lowercase"",
                alignColumnDefinitionsInColumns: true
            }
        }
    }
}";

            JObject message       = JObject.Parse(settingsJson);
            JToken  messageParams = null;

            message.TryGetValue("params", out messageParams);
            SqlToolsSettings sqlToolsSettings = messageParams.ToObject <SqlToolsSettings>();

            Assert.True(sqlToolsSettings.SqlTools.Format.AlignColumnDefinitionsInColumns);
            Assert.Equal(CasingOptions.Lowercase, sqlToolsSettings.SqlTools.Format.DatatypeCasing);
            Assert.Equal(CasingOptions.Uppercase, sqlToolsSettings.SqlTools.Format.KeywordCasing);
            Assert.True(sqlToolsSettings.SqlTools.Format.PlaceCommasBeforeNextStatement);
            Assert.True(sqlToolsSettings.SqlTools.Format.PlaceSelectStatementReferencesOnNewLine);
            Assert.True(sqlToolsSettings.SqlTools.Format.UseBracketForIdentifiers);
        }
示例#2
0
        public async Task ChangeConfigurationTest()
        {
            using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
                using (TestHelper testHelper = new TestHelper())
                {
                    bool connected = await testHelper.Connect(queryTempFile.FilePath, ConnectionTestUtils.LocalhostConnection);

                    Assert.True(connected, "Connection was not successful");

                    Thread.Sleep(500);

                    var settings = new SqlToolsSettings();
                    settings.SqlTools.IntelliSense.EnableIntellisense = false;
                    DidChangeConfigurationParams <SqlToolsSettings> configParams = new DidChangeConfigurationParams <SqlToolsSettings>()
                    {
                        Settings = settings
                    };

                    await testHelper.RequestChangeConfigurationNotification(configParams);

                    Thread.Sleep(2000);

                    await testHelper.Disconnect(queryTempFile.FilePath);
                }
        }
 public Task HandleDidChangeConfigurationNotification(
     SqlToolsSettings newSettings,
     SqlToolsSettings oldSettings,
     EventContext eventContext)
 {
     return(Task.FromResult(true));
 }
        public void ValidateSettingsObjectUpdates()
        {
            // If: I update a settings object with a new settings object
            var qes = new QueryExecutionService(null, null);
            SqlToolsSettings settings = new SqlToolsSettings()
            {
                SqlTools = new SqlToolsSettingsValues
                {
                    QueryExecutionSettings = new QueryExecutionSettings
                    {
                        DisplayBitAsNumber   = false,
                        MaxXmlCharsToStore   = 1,
                        MaxCharsToStore      = 1,
                        ExecutionPlanOptions = new ExecutionPlanOptions
                        {
                            IncludeActualExecutionPlanXml    = true,
                            IncludeEstimatedExecutionPlanXml = true
                        },
                        BatchSeparator = "YO"
                    }
                }
            };

            qes.UpdateSettings(settings, null, new EventContext());

            // Then: The settings object should match what it was updated to
            Assert.False(qes.Settings.QueryExecutionSettings.DisplayBitAsNumber);
            Assert.True(qes.Settings.QueryExecutionSettings.ExecutionPlanOptions.IncludeActualExecutionPlanXml);
            Assert.True(qes.Settings.QueryExecutionSettings.ExecutionPlanOptions.IncludeEstimatedExecutionPlanXml);
            Assert.Equal(1, qes.Settings.QueryExecutionSettings.MaxCharsToStore);
            Assert.Equal(1, qes.Settings.QueryExecutionSettings.MaxXmlCharsToStore);
            Assert.Equal("YO", qes.Settings.QueryExecutionSettings.BatchSeparator);
        }
        /// <summary>
        /// Handle the file configuration change notification
        /// </summary>
        /// <param name="newSettings"></param>
        /// <param name="oldSettings"></param>
        /// <param name="eventContext"></param>
        public async Task HandleDidChangeConfigurationNotification(
            SqlToolsSettings newSettings,
            SqlToolsSettings oldSettings,
            EventContext eventContext)
        {
            bool oldEnableIntelliSense = oldSettings.SqlTools.IntelliSense.EnableIntellisense;
            bool?oldEnableDiagnostics  = oldSettings.SqlTools.IntelliSense.EnableErrorChecking;

            // update the current settings to reflect any changes
            CurrentSettings.Update(newSettings);

            // if script analysis settings have changed we need to clear the current diagnostic markers
            if (oldEnableIntelliSense != newSettings.SqlTools.IntelliSense.EnableIntellisense ||
                oldEnableDiagnostics != newSettings.SqlTools.IntelliSense.EnableErrorChecking)
            {
                // if the user just turned off diagnostics then send an event to clear the error markers
                if (!newSettings.IsDiagnositicsEnabled)
                {
                    ScriptFileMarker[] emptyAnalysisDiagnostics = new ScriptFileMarker[0];

                    foreach (var scriptFile in WorkspaceService <SqlToolsSettings> .Instance.Workspace.GetOpenedFiles())
                    {
                        await DiagnosticsHelper.PublishScriptDiagnostics(scriptFile, emptyAnalysisDiagnostics, eventContext);
                    }
                }
                // otherwise rerun diagnostic analysis on all opened SQL files
                else
                {
                    await this.RunScriptDiagnostics(CurrentWorkspace.GetOpenedFiles(), eventContext);
                }
            }
        }
        public void CanCopyDefaultFormatSettingsToOptions()
        {
            var           sqlToolsSettings = new SqlToolsSettings();
            FormatOptions options          = new FormatOptions();

            TSqlFormatterService.UpdateFormatOptionsFromSettings(options, sqlToolsSettings.SqlTools.Format);
            AssertOptionsHaveDefaultValues(options);
        }
 /// <summary>
 /// Ensure formatter settings are always up to date
 /// </summary>
 public Task HandleDidChangeConfigurationNotification(
     SqlToolsSettings newSettings,
     SqlToolsSettings oldSettings,
     EventContext eventContext)
 {
     // update the current settings to reflect any changes (assuming formatter settings exist)
     settings = newSettings.SqlTools.Format ?? settings;
     return(Task.FromResult(true));
 }
        public void CanCopyAlteredFormatSettingsToOptions()
        {
            SqlToolsSettings sqlToolsSettings = CreateNonDefaultFormatSettings();

            FormatOptions options = new FormatOptions();

            TSqlFormatterService.UpdateFormatOptionsFromSettings(options, sqlToolsSettings.SqlTools.Format);

            AssertOptionsHaveExpectedNonDefaultValues(options);
        }
        public void ValidateFormatterServiceDefaults()
        {
            var sqlToolsSettings = new SqlToolsSettings();

            Assert.Null(sqlToolsSettings.SqlTools.Format.AlignColumnDefinitionsInColumns);
            Assert.Equal(CasingOptions.None, sqlToolsSettings.SqlTools.Format.DatatypeCasing);
            Assert.Equal(CasingOptions.None, sqlToolsSettings.SqlTools.Format.KeywordCasing);
            Assert.Null(sqlToolsSettings.SqlTools.Format.PlaceCommasBeforeNextStatement);
            Assert.Null(sqlToolsSettings.SqlTools.Format.PlaceSelectStatementReferencesOnNewLine);
            Assert.Null(sqlToolsSettings.SqlTools.Format.UseBracketForIdentifiers);
        }
示例#10
0
        public void ValidateLanguageServiceDefaults()
        {
            var sqlToolsSettings = new SqlToolsSettings();

            Assert.True(sqlToolsSettings.IsDiagnositicsEnabled);
            Assert.True(sqlToolsSettings.IsSuggestionsEnabled);
            Assert.True(sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense);
            Assert.True(sqlToolsSettings.SqlTools.IntelliSense.EnableErrorChecking);
            Assert.True(sqlToolsSettings.SqlTools.IntelliSense.EnableSuggestions);
            Assert.True(sqlToolsSettings.SqlTools.IntelliSense.EnableQuickInfo);
            Assert.False(sqlToolsSettings.SqlTools.IntelliSense.LowerCaseSuggestions);
        }
        private static SqlToolsSettings CreateNonDefaultFormatSettings()
        {
            var sqlToolsSettings = new SqlToolsSettings();

            sqlToolsSettings.SqlTools.Format.AlignColumnDefinitionsInColumns = true;
            sqlToolsSettings.SqlTools.Format.DatatypeCasing = CasingOptions.Lowercase;
            sqlToolsSettings.SqlTools.Format.KeywordCasing  = CasingOptions.Uppercase;
            sqlToolsSettings.SqlTools.Format.PlaceCommasBeforeNextStatement          = true;
            sqlToolsSettings.SqlTools.Format.PlaceSelectStatementReferencesOnNewLine = true;
            sqlToolsSettings.SqlTools.Format.UseBracketForIdentifiers = true;
            return(sqlToolsSettings);
        }
示例#12
0
        public void ValidateQueryExecuteDefaults()
        {
            // If: I create a new settings object
            var sqlToolsSettings = new SqlToolsSettings();

            // Then: The default values should be as expected
            Assert.Equal("GO", sqlToolsSettings.QueryExecutionSettings.BatchSeparator);
            Assert.Equal(ushort.MaxValue, sqlToolsSettings.QueryExecutionSettings.MaxCharsToStore);
            Assert.Equal(2 * 1024 * 1024, sqlToolsSettings.QueryExecutionSettings.MaxXmlCharsToStore);
            Assert.False(sqlToolsSettings.QueryExecutionSettings.ExecutionPlanOptions.IncludeActualExecutionPlanXml);
            Assert.False(sqlToolsSettings.QueryExecutionSettings.ExecutionPlanOptions.IncludeEstimatedExecutionPlanXml);
            Assert.True(sqlToolsSettings.QueryExecutionSettings.DisplayBitAsNumber);
        }
示例#13
0
        public void ValidateIsDiagnosticsEnabled()
        {
            var sqlToolsSettings = new SqlToolsSettings();

            // diagnostics is enabled if IntelliSense and Diagnostics flags are set
            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense  = true;
            sqlToolsSettings.SqlTools.IntelliSense.EnableErrorChecking = true;
            Assert.True(sqlToolsSettings.IsDiagnositicsEnabled);

            // diagnostics is disabled if either IntelliSense and Diagnostics flags is not set
            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense  = false;
            sqlToolsSettings.SqlTools.IntelliSense.EnableErrorChecking = true;
            Assert.False(sqlToolsSettings.IsDiagnositicsEnabled);

            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense  = true;
            sqlToolsSettings.SqlTools.IntelliSense.EnableErrorChecking = false;
            Assert.False(sqlToolsSettings.IsDiagnositicsEnabled);
        }
示例#14
0
        public void ValidateIsQuickInfoEnabled()
        {
            var sqlToolsSettings = new SqlToolsSettings();

            // quick info is enabled if IntelliSense and quick info flags are set
            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense = true;
            sqlToolsSettings.SqlTools.IntelliSense.EnableQuickInfo    = true;
            Assert.True(sqlToolsSettings.IsQuickInfoEnabled);

            // quick info is disabled if either IntelliSense and quick info flags is not set
            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense = false;
            sqlToolsSettings.SqlTools.IntelliSense.EnableQuickInfo    = true;
            Assert.False(sqlToolsSettings.IsQuickInfoEnabled);

            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense = true;
            sqlToolsSettings.SqlTools.IntelliSense.EnableQuickInfo    = false;
            Assert.False(sqlToolsSettings.IsQuickInfoEnabled);
        }
示例#15
0
        public void ValidateIsSuggestionsEnabled()
        {
            var sqlToolsSettings = new SqlToolsSettings();

            // suggestions is enabled if IntelliSense and Suggestions flags are set
            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense = true;
            sqlToolsSettings.SqlTools.IntelliSense.EnableSuggestions  = true;
            Assert.True(sqlToolsSettings.IsSuggestionsEnabled);

            // suggestions is disabled if either IntelliSense and Suggestions flags is not set
            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense = false;
            sqlToolsSettings.SqlTools.IntelliSense.EnableSuggestions  = true;
            Assert.False(sqlToolsSettings.IsSuggestionsEnabled);

            sqlToolsSettings.SqlTools.IntelliSense.EnableIntellisense = true;
            sqlToolsSettings.SqlTools.IntelliSense.EnableSuggestions  = false;
            Assert.False(sqlToolsSettings.IsSuggestionsEnabled);
        }
示例#16
0
        private static void ValidateSettings(string settingsPropertyName)
        {
            // NOTE: Only testing displayBitAsNumber for now because it is the only one piped through
            string settingsJson = @"{"
                                  + @"""params"": {"
                                  + @"""" + settingsPropertyName + @""": {"
                                  + @"""query"": {"
                                  + @"displayBitAsNumber: false"
                                  + @"}"
                                  + @"}"
                                  + @"}"
                                  + @"}";

            // If: I parse the settings JSON object
            JObject message = JObject.Parse(settingsJson);
            JToken  messageParams;

            Assert.True(message.TryGetValue("params", out messageParams));
            SqlToolsSettings sqlToolsSettings = messageParams.ToObject <SqlToolsSettings>();

            // Then: The values defined in the JSON should propagate to the setting object
            Assert.False(sqlToolsSettings.QueryExecutionSettings.DisplayBitAsNumber);
        }
示例#17
0
 /// Internal for testing purposes
 internal Task UpdateSettings(SqlToolsSettings newSettings, SqlToolsSettings oldSettings, EventContext eventContext)
 {
     Settings.QueryExecutionSettings.Update(newSettings.QueryExecutionSettings);
     return(Task.FromResult(0));
 }
示例#18
0
 internal QueryExecutionService(ConnectionService connService, WorkspaceService <SqlToolsSettings> workspaceService)
 {
     ConnectionService = connService;
     WorkspaceService  = workspaceService;
     Settings          = new SqlToolsSettings();
 }
示例#19
0
 private QueryExecutionService()
 {
     ConnectionService = ConnectionService.Instance;
     WorkspaceService  = WorkspaceService <SqlToolsSettings> .Instance;
     Settings          = new SqlToolsSettings();
 }
示例#20
0
        public void ValidateSettingsObjectUpdates()
        {
            // If: I update a settings object with a new settings object
            var qes = new QueryExecutionService(null, null);
            SqlToolsSettings settings = new SqlToolsSettings()
            {
                SqlTools = new SqlToolsSettingsValues
                {
                    QueryExecutionSettings = new QueryExecutionSettings
                    {
                        DisplayBitAsNumber        = false,
                        MaxXmlCharsToStore        = 1,
                        MaxCharsToStore           = 1,
                        RowCount                  = 0,
                        TextSize                  = 1000,
                        ExecutionTimeout          = 5000,
                        NoCount                   = true,
                        NoExec                    = true,
                        ParseOnly                 = true,
                        ArithAbort                = true,
                        StatisticsTime            = true,
                        StatisticsIO              = true,
                        XactAbortOn               = true,
                        TransactionIsolationLevel = "REPEATABLE READ",
                        DeadlockPriority          = "LOW",
                        LockTimeout               = 5000,
                        QueryGovernorCostLimit    = 2000,
                        AnsiDefaults              = false,
                        QuotedIdentifier          = true,
                        AnsiNullDefaultOn         = true,
                        ImplicitTransactions      = true,
                        CursorCloseOnCommit       = true,
                        AnsiPadding               = true,
                        AnsiWarnings              = true,
                        AnsiNulls                 = true,
                        ExecutionPlanOptions      = new ExecutionPlanOptions
                        {
                            IncludeActualExecutionPlanXml    = true,
                            IncludeEstimatedExecutionPlanXml = true
                        },
                        BatchSeparator = "YO"
                    }
                }
            };

            qes.UpdateSettings(settings, null, new EventContext());

            // Then: The settings object should match what it was updated to
            Assert.False(qes.Settings.QueryExecutionSettings.DisplayBitAsNumber);
            Assert.True(qes.Settings.QueryExecutionSettings.ExecutionPlanOptions.IncludeActualExecutionPlanXml);
            Assert.True(qes.Settings.QueryExecutionSettings.ExecutionPlanOptions.IncludeEstimatedExecutionPlanXml);
            Assert.Equal(1, qes.Settings.QueryExecutionSettings.MaxCharsToStore);
            Assert.Equal(1, qes.Settings.QueryExecutionSettings.MaxXmlCharsToStore);
            Assert.Equal("YO", qes.Settings.QueryExecutionSettings.BatchSeparator);
            Assert.Equal(1, qes.Settings.QueryExecutionSettings.MaxCharsToStore);
            Assert.Equal(0, qes.Settings.QueryExecutionSettings.RowCount);
            Assert.Equal(1000, qes.Settings.QueryExecutionSettings.TextSize);
            Assert.Equal(5000, qes.Settings.QueryExecutionSettings.ExecutionTimeout);
            Assert.True(qes.Settings.QueryExecutionSettings.NoCount);
            Assert.True(qes.Settings.QueryExecutionSettings.NoExec);
            Assert.True(qes.Settings.QueryExecutionSettings.ParseOnly);
            Assert.True(qes.Settings.QueryExecutionSettings.ArithAbort);
            Assert.True(qes.Settings.QueryExecutionSettings.StatisticsTime);
            Assert.True(qes.Settings.QueryExecutionSettings.StatisticsIO);
            Assert.True(qes.Settings.QueryExecutionSettings.XactAbortOn);
            Assert.Equal("REPEATABLE READ", qes.Settings.QueryExecutionSettings.TransactionIsolationLevel);
            Assert.Equal("LOW", qes.Settings.QueryExecutionSettings.DeadlockPriority);
            Assert.Equal(5000, qes.Settings.QueryExecutionSettings.LockTimeout);
            Assert.Equal(2000, qes.Settings.QueryExecutionSettings.QueryGovernorCostLimit);
            Assert.False(qes.Settings.QueryExecutionSettings.AnsiDefaults);
            Assert.True(qes.Settings.QueryExecutionSettings.QuotedIdentifier);
            Assert.True(qes.Settings.QueryExecutionSettings.AnsiNullDefaultOn);
            Assert.True(qes.Settings.QueryExecutionSettings.ImplicitTransactions);
            Assert.True(qes.Settings.QueryExecutionSettings.CursorCloseOnCommit);
            Assert.True(qes.Settings.QueryExecutionSettings.AnsiPadding);
            Assert.True(qes.Settings.QueryExecutionSettings.AnsiWarnings);
            Assert.True(qes.Settings.QueryExecutionSettings.AnsiNulls);
        }