mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-18 17:23:52 -05:00
Adding support for database literal references for Dacpac and SqlProj references (#1858)
* fixing up some nullable spots * Adding database literal support * Adding tests and support for same database refs * Fixing test * merge laggard * Split database reference tests up * PR feedback * Normalizing strings for cross-plat test passing * Updating Projects nuget package * Fixing up test
This commit is contained in:
@@ -81,20 +81,20 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
|
||||
internal async Task HandleOpenSqlProjectRequest(SqlProjectParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!), requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleCloseSqlProjectRequest(SqlProjectParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => Projects.TryRemove(requestParams.ProjectUri, out _), requestContext);
|
||||
await RunWithErrorHandling(() => Projects.TryRemove(requestParams.ProjectUri!, out _), requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleNewSqlProjectRequest(NewSqlProjectParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(async () =>
|
||||
{
|
||||
await SqlProject.CreateProjectAsync(requestParams.ProjectUri, new CreateSqlProjectParams() { ProjectType = requestParams.SqlProjectType, DspVersion = requestParams.DatabaseSchemaProvider });
|
||||
GetProject(requestParams.ProjectUri); // load into the cache
|
||||
await SqlProject.CreateProjectAsync(requestParams.ProjectUri!, new CreateSqlProjectParams() { ProjectType = requestParams.SqlProjectType, DspVersion = requestParams.DatabaseSchemaProvider });
|
||||
GetProject(requestParams.ProjectUri!); // load into the cache
|
||||
}, requestContext);
|
||||
}
|
||||
|
||||
@@ -106,14 +106,14 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
{
|
||||
Success = true,
|
||||
ErrorMessage = null,
|
||||
IsCrossPlatformCompatible = GetProject(requestParams.ProjectUri).CrossPlatformCompatible
|
||||
IsCrossPlatformCompatible = GetProject(requestParams.ProjectUri!).CrossPlatformCompatible
|
||||
};
|
||||
}, requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleUpdateProjectForCrossPlatformRequest(SqlProjectParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).UpdateForCrossPlatform(), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).UpdateForCrossPlatform(), requestContext);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -124,17 +124,17 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
|
||||
internal async Task HandleAddSqlObjectScriptRequest(SqlProjectScriptParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).SqlObjectScripts.Add(new SqlObjectScript(requestParams.Path)), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).SqlObjectScripts.Add(new SqlObjectScript(requestParams.Path!)), requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleDeleteSqlObjectScriptRequest(SqlProjectScriptParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).SqlObjectScripts.Delete(requestParams.Path), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).SqlObjectScripts.Delete(requestParams.Path!), requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleExcludeSqlObjectScriptRequest(SqlProjectScriptParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).SqlObjectScripts.Exclude(requestParams.Path), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).SqlObjectScripts.Exclude(requestParams.Path!), requestContext);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -193,11 +193,11 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
|
||||
internal async Task HandleAddSystemDatabaseReferenceRequest(AddSystemDatabaseReferenceParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).DatabaseReferences.Add(
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).DatabaseReferences.Add(
|
||||
new SystemDatabaseReference(
|
||||
requestParams.SystemDatabase,
|
||||
requestParams.SuppressMissingDependencies,
|
||||
requestParams.DatabaseVariable)),
|
||||
requestParams.DatabaseLiteral)),
|
||||
requestContext);
|
||||
}
|
||||
|
||||
@@ -205,14 +205,32 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
{
|
||||
await RunWithErrorHandling(() =>
|
||||
{
|
||||
SqlProject project = GetProject(requestParams.ProjectUri);
|
||||
requestParams.Validate();
|
||||
|
||||
project.DatabaseReferences.Add(
|
||||
new DacpacReference(
|
||||
SqlProject project = GetProject(requestParams.ProjectUri!);
|
||||
DacpacReference reference;
|
||||
|
||||
if (requestParams.DatabaseLiteral != null) // same server, different database via database name literal
|
||||
{
|
||||
reference = new DacpacReference(
|
||||
requestParams.DacpacPath,
|
||||
requestParams.SuppressMissingDependencies,
|
||||
project.SqlCmdVariables.Get(requestParams.DatabaseVariable),
|
||||
project.SqlCmdVariables.Get(requestParams.ServerVariable)));
|
||||
requestParams.DatabaseLiteral);
|
||||
}
|
||||
else if (requestParams.DatabaseVariable != null) // different database, possibly different server via sqlcmdvar
|
||||
{
|
||||
reference = new DacpacReference(
|
||||
requestParams.DacpacPath,
|
||||
requestParams.SuppressMissingDependencies,
|
||||
project.SqlCmdVariables.Get(requestParams.DatabaseVariable!),
|
||||
requestParams.ServerVariable != null ? project.SqlCmdVariables.Get(requestParams.ServerVariable) : null);
|
||||
}
|
||||
else // same database
|
||||
{
|
||||
reference = new DacpacReference(requestParams.DacpacPath, requestParams.SuppressMissingDependencies);
|
||||
}
|
||||
|
||||
project.DatabaseReferences.Add(reference);
|
||||
}, requestContext);
|
||||
}
|
||||
|
||||
@@ -220,42 +238,64 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlProjects
|
||||
{
|
||||
await RunWithErrorHandling(() =>
|
||||
{
|
||||
SqlProject project = GetProject(requestParams.ProjectUri);
|
||||
requestParams.Validate();
|
||||
|
||||
project.DatabaseReferences.Add(
|
||||
new SqlProjectReference(
|
||||
SqlProject project = GetProject(requestParams.ProjectUri!);
|
||||
SqlProjectReference reference;
|
||||
|
||||
if (requestParams.DatabaseLiteral != null) // same server, different database via database name literal
|
||||
{
|
||||
reference = new SqlProjectReference(
|
||||
requestParams.ProjectPath,
|
||||
requestParams.ProjectGuid,
|
||||
requestParams.SuppressMissingDependencies,
|
||||
project.SqlCmdVariables.Get(requestParams.DatabaseVariable),
|
||||
project.SqlCmdVariables.Get(requestParams.ServerVariable)));
|
||||
requestParams.DatabaseLiteral);
|
||||
}
|
||||
else if (requestParams.DatabaseVariable != null) // different database, possibly different server via sqlcmdvar
|
||||
{
|
||||
reference = new SqlProjectReference(
|
||||
requestParams.ProjectPath,
|
||||
requestParams.ProjectGuid, requestParams.SuppressMissingDependencies,
|
||||
project.SqlCmdVariables.Get(requestParams.DatabaseVariable!),
|
||||
requestParams.ServerVariable != null ? project.SqlCmdVariables.Get(requestParams.ServerVariable) : null);
|
||||
}
|
||||
else // same database
|
||||
{
|
||||
reference = new SqlProjectReference(
|
||||
requestParams.ProjectPath,
|
||||
requestParams.ProjectGuid,
|
||||
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);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).DatabaseReferences.Delete(requestParams.Name!), requestContext);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region SQLCMD variable functions
|
||||
|
||||
internal async Task HandleAddSqlCmdVariableRequest(AddSqlCmdVariableParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).SqlCmdVariables.Add(new SqlCmdVariable(requestParams.Name, requestParams.DefaultValue, requestParams.Value)), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).SqlCmdVariables.Add(new SqlCmdVariable(requestParams.Name, requestParams.DefaultValue, requestParams.Value)), requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleDeleteSqlCmdVariableRequest(DeleteSqlCmdVariableParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri).SqlCmdVariables.Delete(requestParams.Name), requestContext);
|
||||
await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri!).SqlCmdVariables.Delete(requestParams.Name), requestContext);
|
||||
}
|
||||
|
||||
internal async Task HandleUpdateSqlCmdVariableRequest(AddSqlCmdVariableParams requestParams, RequestContext<ResultStatus> requestContext)
|
||||
{
|
||||
await RunWithErrorHandling(() =>
|
||||
{
|
||||
SqlProject project = GetProject(requestParams.ProjectUri);
|
||||
SqlProject project = GetProject(requestParams.ProjectUri!);
|
||||
project.SqlCmdVariables.Delete(requestParams.Name); // idempotent (won't throw if doesn't exist)
|
||||
project.SqlCmdVariables.Add(new SqlCmdVariable(requestParams.Name, requestParams.DefaultValue, requestParams.Value));
|
||||
}, requestContext);
|
||||
|
||||
Reference in New Issue
Block a user