From 4d04bff8102a9e29fea16d224dffff9317dcaf8f Mon Sep 17 00:00:00 2001 From: Karl Burtram Date: Wed, 25 Oct 2017 13:34:45 -0700 Subject: [PATCH] Revert "Scripting should await result of requestcontext.sendresult in case it errors" (#526) * Revert "Add rowcount check so that no results error is sent for a query where no rows are returned (#525)" This reverts commit 3392f93a2eceefc6d53c7d783cef7984ebcf7791. * Revert "Add unknown status for DB Nodes whose status is not known (#524)" This reverts commit 3d7b87eca2df3928f9661b96872aab7904ba6d9a. * Revert "Should await result of requestcontext.sendresult in case it errors (#520)" This reverts commit caf196ea31a49bb9383d0476f4d22e77def1b088. --- .../Localization/sr.cs | 11 -- .../Localization/sr.resx | 4 - .../Localization/sr.strings | 2 - .../Localization/sr.xlf | 5 - .../Scripting/ScriptingException.cs | 28 ---- .../Scripting/ScriptingService.cs | 123 ++++++------------ 6 files changed, 43 insertions(+), 130 deletions(-) delete mode 100644 src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingException.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.cs b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.cs index da92b2f8..9cfdb072 100755 --- a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.cs @@ -2405,14 +2405,6 @@ namespace Microsoft.SqlTools.ServiceLayer } } - public static string ScriptingUnexpectedError - { - get - { - return Keys.GetString(Keys.ScriptingUnexpectedError); - } - } - public static string unavailable { get @@ -4608,9 +4600,6 @@ namespace Microsoft.SqlTools.ServiceLayer public const string ScriptingListObjectsCompleteParams_ConnectionString_Property_Invalid = "ScriptingListObjectsCompleteParams_ConnectionString_Property_Invalid"; - public const string ScriptingUnexpectedError = "ScriptingUnexpectedError"; - - public const string unavailable = "unavailable"; diff --git a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.resx b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.resx index da0e2b8c..0c7d3c4b 100755 --- a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.resx +++ b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.resx @@ -1380,10 +1380,6 @@ Error parsing ScriptingListObjectsCompleteParams.ConnectionString property. - - Unexpected error while scripting: no result returned from script operation. - - Unavailable diff --git a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.strings b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.strings index 307814b3..1d7d1c16 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.strings +++ b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.strings @@ -690,8 +690,6 @@ ScriptingParams_FilePath_Property_Invalid = Invalid directory specified by the S ScriptingListObjectsCompleteParams_ConnectionString_Property_Invalid = Error parsing ScriptingListObjectsCompleteParams.ConnectionString property. -ScriptingUnexpectedError = Unexpected error while scripting: no result returned from script operation. - diff --git a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.xlf b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.xlf index 2fedb3b0..84b7d2c9 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.xlf +++ b/src/Microsoft.SqlTools.ServiceLayer/Localization/sr.xlf @@ -2311,11 +2311,6 @@ . Parameters: 0 - value (string), 1 - columnType (string) - - Unexpected error while scripting: no result returned from script operation. - Unexpected error while scripting: no result returned from script operation. - - \ No newline at end of file diff --git a/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingException.cs b/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingException.cs deleted file mode 100644 index 1de0bd6d..00000000 --- a/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingException.cs +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -using System; - -namespace Microsoft.SqlTools.ServiceLayer.Scripting -{ - public class ScriptingException : Exception - { - public ScriptingException() - : base() - { - } - - public ScriptingException(string message, Exception exception) - : base(message, exception) - { - } - - - public ScriptingException(string message) - : base(message) - { - } - } -} \ No newline at end of file diff --git a/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingService.cs b/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingService.cs index f59da1f2..abefea30 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingService.cs @@ -23,7 +23,6 @@ using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Sdk.Sfc; using Microsoft.SqlTools.ServiceLayer.Utility; -using Microsoft.SqlTools.ServiceLayer.LanguageServices; namespace Microsoft.SqlTools.ServiceLayer.Scripting { @@ -228,86 +227,55 @@ namespace Microsoft.SqlTools.ServiceLayer.Scripting /// Runs the async task that performs the scripting operation. /// private void RunSelectTask(ConnectionInfo connInfo, ScriptingParams parameters, RequestContext requestContext) - { - Task.Run(() => - { - try + { + ConnectionServiceInstance.ConnectionQueue.QueueBindingOperation( + key: ConnectionServiceInstance.ConnectionQueue.AddConnectionContext(connInfo, "Scripting"), + bindingTimeout: ScriptingOperationTimeout, + bindOperation: (bindingContext, cancelToken) => { - QueueItem queueItem = ConnectionServiceInstance.ConnectionQueue.QueueBindingOperation( - key: ConnectionServiceInstance.ConnectionQueue.AddConnectionContext(connInfo, "Scripting"), - bindingTimeout: ScriptingOperationTimeout, - bindOperation: (bindingContext, cancelToken) => + string script = string.Empty; + ScriptingObject scriptingObject = parameters.ScriptingObjects[0]; + try + { + Server server = new Server(bindingContext.ServerConnection); + server.DefaultTextMode = true; + + // build object URN + SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(parameters.ConnectionString); + Urn objectUrn = BuildScriptingObjectUrn(server, connectionStringBuilder, scriptingObject); + string typeName = objectUrn.GetNameForType(scriptingObject.Type); + + // select from service broker + if (string.Compare(typeName, "ServiceBroker", StringComparison.CurrentCultureIgnoreCase) == 0) { - return DoScriptSelect(connInfo, parameters, bindingContext); - }); - - queueItem.ItemProcessed.WaitOne(); - var result = queueItem.GetResultAsT(); - if (result == null) - { - result = new ScriptingResultWithException() - { - Exception = new ScriptingException(SR.ScriptingUnexpectedError) - }; + script = Scripter.SelectAllValuesFromTransmissionQueue(objectUrn); + } + + // select from queues + else if (string.Compare(typeName, "Queues", StringComparison.CurrentCultureIgnoreCase) == 0 || + string.Compare(typeName, "SystemQueues", StringComparison.CurrentCultureIgnoreCase) == 0) + { + script = Scripter.SelectAllValues(objectUrn); + } + + // select from table or view + else + { + Database db = server.Databases[connectionStringBuilder.InitialCatalog]; + bool isDw = db.IsSqlDw; + script = new Scripter().SelectFromTableOrView(server, objectUrn, isDw); + } + + // send script result to client + requestContext.SendResult(new ScriptingResult { Script = script }); } - if (result.Exception == null) + catch (Exception e) { - requestContext.SendResult(result).Wait(); + requestContext.SendError(e); } - else - { - requestContext.SendError(result.Exception); - } - } - catch (Exception e) - { - requestContext.SendError(e); - } - }).ContinueWithOnFaulted(null); - } - private ScriptingResult DoScriptSelect(ConnectionInfo connInfo, ScriptingParams parameters, IBindingContext bindingContext) - { - try - { - string script = string.Empty; - ScriptingObject scriptingObject = parameters.ScriptingObjects[0]; - Server server = new Server(bindingContext.ServerConnection); - server.DefaultTextMode = true; - - // build object URN - SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(parameters.ConnectionString); - Urn objectUrn = BuildScriptingObjectUrn(server, connectionStringBuilder, scriptingObject); - string typeName = objectUrn.GetNameForType(scriptingObject.Type); - - // select from service broker - if (string.Compare(typeName, "ServiceBroker", StringComparison.CurrentCultureIgnoreCase) == 0) - { - script = Scripter.SelectAllValuesFromTransmissionQueue(objectUrn); - } - - // select from queues - else if (string.Compare(typeName, "Queues", StringComparison.CurrentCultureIgnoreCase) == 0 || - string.Compare(typeName, "SystemQueues", StringComparison.CurrentCultureIgnoreCase) == 0) - { - script = Scripter.SelectAllValues(objectUrn); - } - - // select from table or view - else - { - Database db = server.Databases[connectionStringBuilder.InitialCatalog]; - bool isDw = db.IsSqlDw; - script = new Scripter().SelectFromTableOrView(server, objectUrn, isDw); - } - - // send script result to client - return new ScriptingResult { Script = script }; - } - catch (Exception e) - { - return new ScriptingResultWithException() { Exception = e}; - } + return null; + }); } /// @@ -349,10 +317,5 @@ namespace Microsoft.SqlTools.ServiceLayer.Scripting } } } - - internal class ScriptingResultWithException : ScriptingResult - { - public Exception Exception { get; set; } - } } } \ No newline at end of file