add parse t-sql script handler (#1561)

* add parse t-sql script handler

* handle error
This commit is contained in:
Alan Ren
2022-06-30 11:05:38 -07:00
committed by GitHub
parent deae354f31
commit 0b3c86cde8
3 changed files with 60 additions and 1 deletions

View File

@@ -22,7 +22,7 @@
<PackageReference Update="Microsoft.Data.SqlClient" Version="3.1.0" />
<PackageReference Update="Microsoft.SqlServer.SqlManagementObjects" Version="161.47021.0" />
<PackageReference Update="Microsoft.SqlServer.Management.SmoMetadataProvider" Version="161.47008.0" />
<PackageReference Update="Microsoft.SqlServer.DACFx" Version="160.6188.0-preview" GeneratePathProperty="true" />
<PackageReference Update="Microsoft.SqlServer.DACFx" Version="160.6208.0-preview" GeneratePathProperty="true" />
<PackageReference Update="Microsoft.Azure.Kusto.Data" Version="9.0.4" />
<PackageReference Update="Microsoft.Azure.Kusto.Language" Version="9.0.4" />
<PackageReference Update="Microsoft.SqlServer.Assessment" Version="[1.0.305]" />

View File

@@ -0,0 +1,42 @@
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
using Microsoft.SqlTools.ServiceLayer.Utility;
namespace Microsoft.SqlTools.ServiceLayer.DacFx.Contracts
{
/// <summary>
/// Parameters for a parse T-SQL script request.
/// </summary>
public class ParseTSqlScriptRequestParams
{
/// <summary>
/// Gets or sets the script content
/// </summary>
public string Script { get; set; }
/// <summary>
/// Gets or sets the DSP.
/// </summary>
public string DatabaseSchemaProvider { get; set;}
}
/// <summary>
/// Result for the ParseTSqlScript Request.
/// </summary>
public class ParseTSqlScriptResult : ResultStatus
{
public bool ContainsCreateTableStatement { get; set; }
}
/// <summary>
/// Defines the parse T-SQL script request type
/// </summary>
class ParseTSqlScriptRequest
{
public static readonly RequestType<ParseTSqlScriptRequestParams, ParseTSqlScriptResult> Type =
RequestType<ParseTSqlScriptRequestParams, ParseTSqlScriptResult>.Create("dacfx/parseTSqlScript");
}
}

View File

@@ -11,6 +11,7 @@ using Microsoft.SqlTools.ServiceLayer.Connection;
using Microsoft.SqlTools.ServiceLayer.DacFx.Contracts;
using Microsoft.SqlTools.ServiceLayer.Hosting;
using Microsoft.SqlTools.ServiceLayer.TaskServices;
using DacTableDesigner = Microsoft.Data.Tools.Sql.DesignServices.TableDesigner.TableDesigner;
namespace Microsoft.SqlTools.ServiceLayer.DacFx
{
@@ -48,6 +49,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
serviceHost.SetRequestHandler(GetOptionsFromProfileRequest.Type, this.HandleGetOptionsFromProfileRequest);
serviceHost.SetRequestHandler(ValidateStreamingJobRequest.Type, this.HandleValidateStreamingJobRequest);
serviceHost.SetRequestHandler(GetDefaultPublishOptionsRequest.Type, this.HandleGetDefaultPublishOptionsRequest);
serviceHost.SetRequestHandler(ParseTSqlScriptRequest.Type, this.HandleParseTSqlScriptRequest);
}
/// <summary>
@@ -305,6 +307,21 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
}
}
public async Task HandleParseTSqlScriptRequest(ParseTSqlScriptRequestParams requestParams, RequestContext<ParseTSqlScriptResult> requestContext)
{
try
{
await requestContext.SendResult(new ParseTSqlScriptResult()
{
ContainsCreateTableStatement = DacTableDesigner.ScriptContainsCreateTableStatements(requestParams.Script, requestParams.DatabaseSchemaProvider)
});
}
catch (Exception e)
{
await requestContext.SendError(e);
}
}
private void ExecuteOperation(DacFxOperation operation, DacFxParams parameters, string taskName, RequestContext<DacFxResult> requestContext)
{
Task.Run(async () =>