mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
Add serialization service support (#840)
Added a method that handles serialization requests Support splitting save over multiple requests to reduce overall message size Added unit tests String changes used a new version of the string tool for generation. Will publish PR separately for the changes to build & localization so this can run on Mac without .Net Core 1.0
This commit is contained in:
@@ -3,14 +3,77 @@
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System.Data;
|
||||
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
|
||||
using Microsoft.SqlTools.Utility;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts
|
||||
{
|
||||
|
||||
|
||||
public class ColumnInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Name of this column
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
public string DataTypeName { get; set; }
|
||||
|
||||
public ColumnInfo()
|
||||
{
|
||||
}
|
||||
|
||||
public ColumnInfo(string name, string dataTypeName)
|
||||
{
|
||||
this.Name = name;
|
||||
this.DataTypeName = dataTypeName;
|
||||
}
|
||||
}
|
||||
|
||||
public interface ISerializationParams
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Path to file that the serialized results will be stored in
|
||||
/// </summary>
|
||||
string FilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Results that are to be serialized into 'SaveFormat' format
|
||||
/// </summary>
|
||||
DbCellValue[][] Rows { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the current set of Rows passed in is the last for this file
|
||||
// </summary>
|
||||
bool IsLastBatch { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Class used for storing results and how the results are to be serialized
|
||||
/// </summary>
|
||||
public class SaveResultsInfo
|
||||
public class SerializeDataContinueRequestParams : ISerializationParams
|
||||
{
|
||||
/// <summary>
|
||||
/// Path to file that the serialized results will be stored in
|
||||
/// </summary>
|
||||
public string FilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Results that are to be serialized into 'SaveFormat' format
|
||||
/// </summary>
|
||||
public DbCellValue[][] Rows { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the current set of Rows passed in is the last for this file
|
||||
// </summary>
|
||||
public bool IsLastBatch { get; set; }
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// Class used for storing results and how the results are to be serialized
|
||||
/// </summary>
|
||||
public class SerializeDataStartRequestParams : GeneralRequestDetails, ISerializationParams
|
||||
{
|
||||
/// <summary>
|
||||
/// String representation of the type that service is supposed to serialize to
|
||||
@@ -21,37 +84,97 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts
|
||||
/// <summary>
|
||||
/// Path to file that the serialized results will be stored in
|
||||
/// </summary>
|
||||
public string SavePath { get; set; }
|
||||
public string FilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Results that are to be serialized into 'SaveFormat' format
|
||||
/// </summary>
|
||||
public DbCellValue[][] Rows { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the current set of Rows passed in is the last for this file
|
||||
// </summary>
|
||||
public bool IsLast { get; set; }
|
||||
public ColumnInfo[] Columns { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether this is the only request expected for this file.
|
||||
// </summary>
|
||||
public bool IsLastBatch { get; set; }
|
||||
|
||||
public SerializeDataStartRequestParams()
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
public SaveResultsInfo(string saveFormat,
|
||||
public SerializeDataStartRequestParams(string saveFormat,
|
||||
string savePath,
|
||||
DbCellValue[][] rows,
|
||||
bool isLast)
|
||||
{
|
||||
this.SaveFormat = saveFormat;
|
||||
this.SavePath = savePath;
|
||||
this.FilePath = savePath;
|
||||
this.Rows = Rows;
|
||||
this.IsLast = isLast;
|
||||
this.IsLastBatch = isLast;
|
||||
}
|
||||
|
||||
internal bool IncludeHeaders
|
||||
{
|
||||
get { return this.GetOptionValue<bool>(SerializationOptionsHelper.IncludeHeaders); }
|
||||
set { this.SetOptionValue<bool>(SerializationOptionsHelper.IncludeHeaders, value); }
|
||||
}
|
||||
|
||||
internal string Delimiter
|
||||
{
|
||||
get { return this.GetOptionValue<string>(SerializationOptionsHelper.Delimiter); }
|
||||
set { this.SetOptionValue<string>(SerializationOptionsHelper.Delimiter, value); }
|
||||
}
|
||||
|
||||
internal string LineSeparator
|
||||
{
|
||||
get { return this.GetOptionValue<string>(SerializationOptionsHelper.LineSeparator); }
|
||||
set { this.SetOptionValue<string>(SerializationOptionsHelper.LineSeparator, value); }
|
||||
}
|
||||
|
||||
internal string TextIdentifier
|
||||
{
|
||||
get { return this.GetOptionValue<string>(SerializationOptionsHelper.TextIdentifier); }
|
||||
set { this.SetOptionValue<string>(SerializationOptionsHelper.TextIdentifier, value); }
|
||||
}
|
||||
|
||||
internal string Encoding
|
||||
{
|
||||
get { return this.GetOptionValue<string>(SerializationOptionsHelper.Encoding); }
|
||||
set { this.SetOptionValue<string>(SerializationOptionsHelper.Encoding, value); }
|
||||
}
|
||||
|
||||
internal bool Formatted
|
||||
{
|
||||
get { return this.GetOptionValue<bool>(SerializationOptionsHelper.Formatted); }
|
||||
set { this.SetOptionValue<bool>(SerializationOptionsHelper.Formatted, value); }
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveAsRequest
|
||||
public class SerializeDataResult
|
||||
{
|
||||
public static readonly
|
||||
RequestType<SaveResultsInfo, SaveResultRequestResult> Type =
|
||||
RequestType<SaveResultsInfo, SaveResultRequestResult>.Create("query/saveAs");
|
||||
public string Messages { get; set; }
|
||||
|
||||
public bool Succeeded { get; set; }
|
||||
}
|
||||
|
||||
public class SerializeStartRequest
|
||||
{
|
||||
public static readonly RequestType<SerializeDataStartRequestParams, SerializeDataResult> Type = RequestType<SerializeDataStartRequestParams, SerializeDataResult>.Create("serialize/start");
|
||||
}
|
||||
public class SerializeContinueRequest
|
||||
{
|
||||
public static readonly RequestType<SerializeDataContinueRequestParams, SerializeDataResult> Type = RequestType<SerializeDataContinueRequestParams, SerializeDataResult>.Create("serialize/continue");
|
||||
}
|
||||
|
||||
class SerializationOptionsHelper
|
||||
{
|
||||
internal const string IncludeHeaders = "includeHeaders";
|
||||
internal const string Delimiter = "delimiter";
|
||||
internal const string LineSeparator = "lineSeparator";
|
||||
internal const string TextIdentifier = "textIdentifier";
|
||||
internal const string Encoding = "encoding";
|
||||
internal const string Formatted = "formatted";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user