diff --git a/bin/nuget/Microsoft.SqlServer.Smo.140.17051.0.nupkg b/bin/nuget/Microsoft.SqlServer.Smo.140.17051.0.nupkg
deleted file mode 100644
index 524be7a7..00000000
Binary files a/bin/nuget/Microsoft.SqlServer.Smo.140.17051.0.nupkg and /dev/null differ
diff --git a/bin/nuget/Microsoft.SqlServer.Smo.140.17053.0.nupkg b/bin/nuget/Microsoft.SqlServer.Smo.140.17053.0.nupkg
new file mode 100644
index 00000000..61529622
Binary files /dev/null and b/bin/nuget/Microsoft.SqlServer.Smo.140.17053.0.nupkg differ
diff --git a/docs/samples/jsonrpc/netcore/executequery/project.json b/docs/samples/jsonrpc/netcore/executequery/project.json
index 847ad937..f7e9559b 100644
--- a/docs/samples/jsonrpc/netcore/executequery/project.json
+++ b/docs/samples/jsonrpc/netcore/executequery/project.json
@@ -12,7 +12,7 @@
"Newtonsoft.Json": "9.0.1",
"System.Data.Common": "4.1.0",
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
- "Microsoft.SqlServer.Smo": "140.17051.0",
+ "Microsoft.SqlServer.Smo": "140.17053.0",
"System.Security.SecureString": "4.0.0",
"System.Collections.Specialized": "4.0.1",
"System.ComponentModel.TypeConverter": "4.1.0",
diff --git a/docs/samples/smo/netcore/ModifySetting/project.json b/docs/samples/smo/netcore/ModifySetting/project.json
index 347469e1..3b5292fb 100644
--- a/docs/samples/smo/netcore/ModifySetting/project.json
+++ b/docs/samples/smo/netcore/ModifySetting/project.json
@@ -5,7 +5,7 @@
"emitEntryPoint": true
},
"dependencies": {
- "Microsoft.SqlServer.Smo": "140.17051.0"
+ "Microsoft.SqlServer.Smo": "140.17053.0"
},
"frameworks": {
"netcoreapp1.0": {
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs
index 84c0e978..1aabc31f 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs
@@ -12,11 +12,12 @@ using System;
using System.Threading.Tasks;
using System.Xml;
using Microsoft.SqlServer.Management.Smo;
+using System.Collections.Concurrent;
namespace Microsoft.SqlTools.ServiceLayer.Admin
{
///
- /// Datasource admin task service class
+ /// Admin task service class
///
public class AdminService
{
@@ -24,6 +25,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
private static ConnectionService connectionService = null;
+ private static readonly ConcurrentDictionary serverTaskHelperMap =
+ new ConcurrentDictionary();
+
+ private static DatabaseTaskHelper taskHelper;
+
///
/// Default, parameterless constructor.
///
@@ -69,30 +75,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
serviceHost.SetRequestHandler(DefaultDatabaseInfoRequest.Type, HandleDefaultDatabaseInfoRequest);
}
- private static DatabaseTaskHelper CreateDatabaseTaskHelper(ConnectionInfo connInfo)
- {
- XmlDocument xmlDoc = CreateDataContainerDocument(connInfo);
- char[] passwordArray = connInfo.ConnectionDetails.Password.ToCharArray();
- CDataContainer dataContainer;
-
- unsafe
- {
- fixed (char* passwordPtr = passwordArray)
- {
- dataContainer = new CDataContainer(
- CDataContainer.ServerType.SQL,
- connInfo.ConnectionDetails.ServerName,
- false,
- connInfo.ConnectionDetails.UserName,
- new System.Security.SecureString(passwordPtr, passwordArray.Length),
- xmlDoc.InnerXml);
- }
- }
-
- var taskHelper = new DatabaseTaskHelper(dataContainer);
- return taskHelper;
- }
-
///
/// Handle a request for the default database prototype info
///
@@ -106,12 +88,87 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
optionsParams.OwnerUri,
out connInfo);
- DatabaseTaskHelper taskHelper = CreateDatabaseTaskHelper(connInfo);
+ if (taskHelper == null)
+ {
+ taskHelper = CreateDatabaseTaskHelper(connInfo);
+ }
response.DefaultDatabaseInfo = DatabaseTaskHelper.DatabasePrototypeToDatabaseInfo(taskHelper.Prototype);
await requestContext.SendResult(response);
}
+ ///
+ /// Handles a create database request
+ ///
+ internal static async Task HandleCreateDatabaseRequest(
+ CreateDatabaseParams databaseParams,
+ RequestContext requestContext)
+ {
+ var response = new DefaultDatabaseInfoResponse();
+ ConnectionInfo connInfo;
+ AdminService.ConnectionServiceInstance.TryFindConnection(
+ databaseParams.OwnerUri,
+ out connInfo);
+
+ if (taskHelper == null)
+ {
+ taskHelper = CreateDatabaseTaskHelper(connInfo);
+ }
+
+ DatabasePrototype prototype = taskHelper.Prototype;
+ DatabaseTaskHelper.ApplyToPrototype(databaseParams.DatabaseInfo, taskHelper.Prototype);
+
+ Database db = prototype.ApplyChanges();
+ if (db != null)
+ {
+ taskHelper = null;
+ }
+
+ await requestContext.SendResult(new CreateDatabaseResponse()
+ {
+ Result = true,
+ TaskId = 0
+ });
+ }
+
+ private static DatabaseTaskHelper CreateDatabaseTaskHelper(ConnectionInfo connInfo)
+ {
+ XmlDocument xmlDoc = CreateDataContainerDocument(connInfo);
+ char[] passwordArray = connInfo.ConnectionDetails.Password.ToCharArray();
+ CDataContainer dataContainer;
+
+ // check if the connection is using SQL Auth or Integrated Auth
+ if (string.Equals(connInfo.ConnectionDetails.AuthenticationType, "SqlLogin", StringComparison.OrdinalIgnoreCase))
+ {
+ unsafe
+ {
+ fixed (char* passwordPtr = passwordArray)
+ {
+ dataContainer = new CDataContainer(
+ CDataContainer.ServerType.SQL,
+ connInfo.ConnectionDetails.ServerName,
+ false,
+ connInfo.ConnectionDetails.UserName,
+ new System.Security.SecureString(passwordPtr, passwordArray.Length),
+ xmlDoc.InnerXml);
+ }
+ }
+ }
+ else
+ {
+ dataContainer = new CDataContainer(
+ CDataContainer.ServerType.SQL,
+ connInfo.ConnectionDetails.ServerName,
+ true,
+ null,
+ null,
+ xmlDoc.InnerXml);
+ }
+
+ var taskHelper = new DatabaseTaskHelper(dataContainer);
+ return taskHelper;
+ }
+
private static XmlDocument CreateDataContainerDocument(ConnectionInfo connInfo)
{
string xml =
@@ -131,32 +188,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
return xmlDoc;
}
- ///
- /// Handles a create database request
- ///
- internal static async Task HandleCreateDatabaseRequest(
- CreateDatabaseParams databaseParams,
- RequestContext requestContext)
- {
- var response = new DefaultDatabaseInfoResponse();
- ConnectionInfo connInfo;
- AdminService.ConnectionServiceInstance.TryFindConnection(
- databaseParams.OwnerUri,
- out connInfo);
-
- DatabaseTaskHelper taskHelper = CreateDatabaseTaskHelper(connInfo);
- DatabasePrototype prototype = taskHelper.Prototype;
- DatabaseTaskHelper.ApplyToPrototype(databaseParams.DatabaseInfo, taskHelper.Prototype);
-
- Database db = prototype.ApplyChanges();
-
- await requestContext.SendResult(new CreateDatabaseResponse()
- {
- Result = true,
- TaskId = 0
- });
- }
-
///
/// Handles a create login request
///
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs
index 0d417dd8..481fcf75 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs
@@ -169,6 +169,12 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
{
file.Name = prototype.Name + "_" + logicalNameCount;
}
+ else
+ {
+ file.Name += prototype.Name + file.Name + "_" + logicalNameCount;
+ }
+
+ ++logicalNameCount;
}
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Workspace/Workspace.cs b/src/Microsoft.SqlTools.ServiceLayer/Workspace/Workspace.cs
index 279c1b37..6853401d 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/Workspace/Workspace.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/Workspace/Workspace.cs
@@ -11,6 +11,7 @@ using System.Text.RegularExpressions;
using System.Linq;
using Microsoft.SqlTools.Utility;
using Microsoft.SqlTools.ServiceLayer.Workspace.Contracts;
+using System.Runtime.InteropServices;
namespace Microsoft.SqlTools.ServiceLayer.Workspace
{
@@ -114,7 +115,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace
// Client sent the path in URI format, extract the local path and trim
// any extraneous slashes
Uri fileUri = new Uri(filePath);
- filePath = fileUri.LocalPath.TrimStart('/');
+ filePath = fileUri.LocalPath;
+ if (filePath.StartsWith("//") || filePath.StartsWith("\\\\"))
+ {
+ filePath = filePath.Substring(1);
+ }
}
// Clients could specify paths with escaped space, [ and ] characters which .NET APIs
@@ -122,6 +127,12 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace
// into the SqlTools engine.
filePath = UnescapePath(filePath);
+ // switch to unix path separators on non-Windows platforms
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ filePath = filePath.Replace('\\', '/');
+ }
+
// Get the absolute file path
filePath = Path.GetFullPath(filePath);
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/project.json b/src/Microsoft.SqlTools.ServiceLayer/project.json
index e9a57e12..f134d50d 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/project.json
+++ b/src/Microsoft.SqlTools.ServiceLayer/project.json
@@ -21,7 +21,7 @@
"Newtonsoft.Json": "9.0.1",
"System.Data.Common": "4.1.0",
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
- "Microsoft.SqlServer.Smo": "140.17051.0",
+ "Microsoft.SqlServer.Smo": "140.17053.0",
"Microsoft.SqlServer.Management.SqlScriptPublishModel": "140.17049.0",
"System.Security.SecureString": "4.0.0",
"System.Collections.Specialized": "4.0.1",
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/PeekDefinitionTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/PeekDefinitionTests.cs
index b550377b..d17080d2 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/PeekDefinitionTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/PeekDefinitionTests.cs
@@ -297,9 +297,9 @@ GO";
ServerConnection serverConnection = LiveConnectionHelper.InitLiveServerConnectionForDefinition(connInfo);
Scripter scripter = new Scripter(serverConnection, connInfo);
- string objectName = "sp_MSrepl_startup";
+ string objectName = "sp_columns";
- string schemaName = "dbo";
+ string schemaName = "sys";
string objectType = "PROCEDURE";
Location[] locations = scripter.GetSqlObjectDefinition(scripter.GetStoredProcedureScripts, objectName, schemaName, objectType);
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json
index 04ca3283..266d36ad 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json
@@ -17,7 +17,7 @@
"System.Runtime.Serialization.Primitives": "4.1.1",
"System.Data.Common": "4.1.0",
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
- "Microsoft.SqlServer.Smo": "140.17051.0",
+ "Microsoft.SqlServer.Smo": "140.17053.0",
"System.Security.SecureString": "4.0.0",
"System.Collections.Specialized": "4.0.1",
"System.ComponentModel.TypeConverter": "4.1.0",
diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json
index 75af47fd..76d9d20c 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json
+++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json
@@ -18,7 +18,7 @@
"System.Runtime.Serialization.Primitives": "4.1.1",
"System.Data.Common": "4.1.0",
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
- "Microsoft.SqlServer.Smo": "140.17051.0",
+ "Microsoft.SqlServer.Smo": "140.17053.0",
"System.Security.SecureString": "4.0.0",
"System.Collections.Specialized": "4.0.1",
"System.ComponentModel.TypeConverter": "4.1.0",
diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json
index 10e541a4..854b49aa 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json
+++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json
@@ -19,7 +19,7 @@
"System.Runtime.Serialization.Primitives": "4.1.1",
"System.Data.Common": "4.1.0",
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
- "Microsoft.SqlServer.Smo": "140.17051.0",
+ "Microsoft.SqlServer.Smo": "140.17053.0",
"System.Security.SecureString": "4.0.0",
"System.Collections.Specialized": "4.0.1",
"System.ComponentModel.TypeConverter": "4.1.0",