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:
Kim Santiago
2023-04-14 16:18:06 -07:00
committed by GitHub
parent 55b415e5ef
commit 13672c1d05
8 changed files with 180 additions and 2 deletions

View File

@@ -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");
}
}

View File

@@ -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; }
}
}

View File

@@ -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);