mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
Add support for nupkg database references in sql projects (#2006)
* add support for nupkg database references in sql projects * update DacFx.Projects
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
#nullable disable
|
||||
|
||||
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
|
||||
using Microsoft.SqlTools.ServiceLayer.Utility;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.SqlProjects.Contracts
|
||||
{
|
||||
/// <summary>
|
||||
/// Parameters for adding a NuGet package reference to a SQL project
|
||||
/// </summary>
|
||||
public class AddNugetPackageReferenceParams : AddUserDatabaseReferenceParams
|
||||
{
|
||||
/// <summary>
|
||||
/// NuGet package name
|
||||
/// </summary>
|
||||
public string PackageName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// NuGet package version
|
||||
/// </summary>
|
||||
public string PackageVersion { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a NuGet package reference to a project
|
||||
/// </summary>
|
||||
public class AddNugetPackageReferenceRequest
|
||||
{
|
||||
public static readonly RequestType<AddNugetPackageReferenceParams, ResultStatus> Type = RequestType<AddNugetPackageReferenceParams, ResultStatus>.Create("sqlprojects/addNugetPackageReference");
|
||||
}
|
||||
}
|
||||
@@ -38,5 +38,10 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects.Contracts
|
||||
/// Array of SQL project references contained in the project
|
||||
/// </summary>
|
||||
public SqlProjectReference[] SqlProjectReferences { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Array of NuGet package references contained in the project
|
||||
/// </summary>
|
||||
public NugetPackageReference[] NugetPackageReferences { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,7 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
serviceHost.SetRequestHandler(AddSystemDatabaseReferenceRequest.Type, HandleAddSystemDatabaseReferenceRequest, isParallelProcessingSupported: false);
|
||||
serviceHost.SetRequestHandler(AddDacpacReferenceRequest.Type, HandleAddDacpacReferenceRequest, isParallelProcessingSupported: false);
|
||||
serviceHost.SetRequestHandler(AddSqlProjectReferenceRequest.Type, HandleAddSqlProjectReferenceRequest, isParallelProcessingSupported: false);
|
||||
serviceHost.SetRequestHandler(AddNugetPackageReferenceRequest.Type, HandleAddNugetPackageReferenceRequest, isParallelProcessingSupported: false);
|
||||
serviceHost.SetRequestHandler(DeleteDatabaseReferenceRequest.Type, HandleDeleteDatabaseReferenceRequest, isParallelProcessingSupported: false);
|
||||
}
|
||||
|
||||
@@ -358,7 +359,8 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
ErrorMessage = null,
|
||||
SystemDatabaseReferences = GetProject(requestParams.ProjectUri).DatabaseReferences.OfType<SystemDatabaseReference>().ToArray(),
|
||||
DacpacReferences = GetProject(requestParams.ProjectUri).DatabaseReferences.OfType<DacpacReference>().ToArray(),
|
||||
SqlProjectReferences = GetProject(requestParams.ProjectUri).DatabaseReferences.OfType<SqlProjectReference>().ToArray()
|
||||
SqlProjectReferences = GetProject(requestParams.ProjectUri).DatabaseReferences.OfType<SqlProjectReference>().ToArray(),
|
||||
NugetPackageReferences = GetProject(requestParams.ProjectUri).DatabaseReferences.OfType<NugetPackageReference>().ToArray()
|
||||
};
|
||||
}, requestContext);
|
||||
}
|
||||
@@ -443,6 +445,42 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
}, requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleAddNugetPackageReferenceRequest(AddNugetPackageReferenceParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() =>
|
||||
{
|
||||
requestParams.Validate();
|
||||
|
||||
SqlProject project = GetProject(requestParams.ProjectUri!);
|
||||
NugetPackageReference reference;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(requestParams.DatabaseLiteral)) // same server, different database via database name literal
|
||||
{
|
||||
reference = new NugetPackageReference(
|
||||
requestParams.PackageName,
|
||||
requestParams.PackageVersion,
|
||||
requestParams.SuppressMissingDependencies,
|
||||
requestParams.DatabaseLiteral);
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(requestParams.DatabaseVariable)) // different database, possibly different server via sqlcmdvar
|
||||
{
|
||||
reference = new NugetPackageReference(
|
||||
requestParams.PackageName,
|
||||
requestParams.PackageVersion,
|
||||
requestParams.SuppressMissingDependencies,
|
||||
project.SqlCmdVariables.Get(requestParams.DatabaseVariable!),
|
||||
requestParams.ServerVariable != null ? project.SqlCmdVariables.Get(requestParams.ServerVariable) : null);
|
||||
}
|
||||
else // same database
|
||||
{
|
||||
reference = new NugetPackageReference(requestParams.PackageName, requestParams.PackageVersion, requestParams.SuppressMissingDependencies);
|
||||
}
|
||||
|
||||
project.DatabaseReferences.Add(reference);
|
||||
}, requestContext);
|
||||
}
|
||||
|
||||
|
||||
internal async Task HandleDeleteDatabaseReferenceRequest(DeleteDatabaseReferenceParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).DatabaseReferences.Delete(requestParams.Name!), requestContext);
|
||||
|
||||
Reference in New Issue
Block a user