From e95b4c84c58f67b0f14401efdc76bc48c19a9e42 Mon Sep 17 00:00:00 2001 From: Amir Omidi Date: Thu, 3 Oct 2019 10:45:23 -0700 Subject: [PATCH] Add execution options to the stream factory (#848) --- .../QueryExecution/DataStorage/IFileStreamFactory.cs | 2 ++ .../DataStorage/ServiceBufferFileStreamFactory.cs | 6 +++--- src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs | 1 + .../QueryExecution/QueryExecutionService.cs | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/IFileStreamFactory.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/IFileStreamFactory.cs index 2bd4f96b..a0fd2251 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/IFileStreamFactory.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/IFileStreamFactory.cs @@ -18,5 +18,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.DataStorage void DisposeFile(string fileName); + SqlContext.QueryExecutionSettings QueryExecutionSettings { get; set; } + } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/ServiceBufferFileStreamFactory.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/ServiceBufferFileStreamFactory.cs index ef26a7ff..51c917b9 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/ServiceBufferFileStreamFactory.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/DataStorage/ServiceBufferFileStreamFactory.cs @@ -19,7 +19,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.DataStorage /// /// The settings for query execution /// - public QueryExecutionSettings ExecutionSettings { get; set; } + public QueryExecutionSettings QueryExecutionSettings { get; set; } #endregion @@ -40,7 +40,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.DataStorage /// A public IFileStreamReader GetReader(string fileName) { - return new ServiceBufferFileStreamReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), ExecutionSettings); + return new ServiceBufferFileStreamReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), QueryExecutionSettings); } /// @@ -51,7 +51,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.DataStorage /// A public IFileStreamWriter GetWriter(string fileName) { - return new ServiceBufferFileStreamWriter(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite), ExecutionSettings); + return new ServiceBufferFileStreamWriter(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite), QueryExecutionSettings); } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs index 7896f09a..ed7dbb12 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs @@ -515,6 +515,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution QueryExecutionSettings settings, IFileStreamFactory outputFactory) { + outputFactory.QueryExecutionSettings = settings; QuerySettingsHelper helper = new QuerySettingsHelper(settings); // set query execution plan options diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs index 5db2ee89..77d7c9f3 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs @@ -73,7 +73,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution { BufferFileStreamFactory = new ServiceBufferFileStreamFactory { - ExecutionSettings = Settings.QueryExecutionSettings + QueryExecutionSettings = Settings.QueryExecutionSettings }; } return BufferFileStreamFactory; @@ -757,6 +757,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution BufferFileFactory, executeParams.GetFullColumnSchema, applyExecutionSettings); + if (!ActiveQueries.TryAdd(executeParams.OwnerUri, newQuery)) { newQuery.Dispose();