diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs index 5b26eafc..10f9d80b 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs @@ -10,6 +10,8 @@ using Microsoft.SqlTools.ServiceLayer.Connection; using Microsoft.SqlTools.ServiceLayer.Hosting; using Microsoft.SqlTools.ServiceLayer.Hosting.Protocol; using Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts; +using Microsoft.SqlTools.ServiceLayer.SqlContext; +using Microsoft.SqlTools.ServiceLayer.Workspace; namespace Microsoft.SqlTools.ServiceLayer.QueryExecution { @@ -60,6 +62,8 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution private readonly Lazy> queries = new Lazy>(() => new ConcurrentDictionary()); + private SqlToolsSettings Settings { get { return WorkspaceService.Instance.CurrentSettings; } } + #endregion /// @@ -81,6 +85,13 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution Dispose(); return Task.FromResult(0); }); + + // Register a handler for when the configuration changes + WorkspaceService.Instance.RegisterConfigChangeCallback((oldSettings, newSettings, eventContext) => + { + Settings.QueryExecutionSettings.Update(newSettings.QueryExecutionSettings); + return Task.FromResult(0); + }); } #region Request Handlers @@ -281,8 +292,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution return; } + // Retrieve the current settings for executing the query with + QueryExecutionSettings settings = WorkspaceService.Instance.CurrentSettings.QueryExecutionSettings; + // Launch the query and respond with successfully launching it - Task executeTask = query.Execute(); + Task executeTask = query.Execute(/*settings*/); await requestContext.SendResult(new QueryExecuteResult { Messages = null diff --git a/src/Microsoft.SqlTools.ServiceLayer/SqlContext/QueryExecutionSettings.cs b/src/Microsoft.SqlTools.ServiceLayer/SqlContext/QueryExecutionSettings.cs new file mode 100644 index 00000000..7e8853a7 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/SqlContext/QueryExecutionSettings.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.SqlTools.ServiceLayer.SqlContext +{ + public class QueryExecutionSettings + { + private const string DefaultBatchSeparator = "GO"; + + private string batchSeparator; + + public string BatchSeparator + { + get { return batchSeparator ?? DefaultBatchSeparator; } + set { batchSeparator = value; } + } + + /// + /// Update the current settings with the new settings + /// + /// The new settings + public void Update(QueryExecutionSettings newSettings) + { + BatchSeparator = newSettings.BatchSeparator; + } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/SqlContext/SqlToolsSettings.cs b/src/Microsoft.SqlTools.ServiceLayer/SqlContext/SqlToolsSettings.cs index 07ea0ffe..f5a14761 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/SqlContext/SqlToolsSettings.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/SqlContext/SqlToolsSettings.cs @@ -31,6 +31,8 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext this.ScriptAnalysis.Update(settings.ScriptAnalysis, workspaceRootPath); } } + + public QueryExecutionSettings QueryExecutionSettings { get; set; } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/Workspace/WorkspaceService.cs b/src/Microsoft.SqlTools.ServiceLayer/Workspace/WorkspaceService.cs index f47cacb9..9cd35f19 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Workspace/WorkspaceService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Workspace/WorkspaceService.cs @@ -44,6 +44,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace ConfigChangeCallbacks = new List(); TextDocChangeCallbacks = new List(); TextDocOpenCallbacks = new List(); + + CurrentSettings = new TConfig(); } #endregion @@ -101,7 +103,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace { // Create a workspace that will handle state for the session Workspace = new Workspace(); - CurrentSettings = new TConfig(); // Register the handlers for when changes to the workspae occur serviceHost.SetEventHandler(DidChangeTextDocumentNotification.Type, HandleDidChangeTextDocumentNotification);