Support Save As CSV/JSON/Excel/XML from Notebooks (#6627)

Updated existing serialization code so it actually supports serialization. Still needs work to replace the saveAs function when a QueryProvider doesn't support save as, but want to handle in separate PR.
Removed separate MainThread/ExtHostSerializationProvider code as the DataProtocol code is the right place to put this code
Plumbed support through the gridOutputComponent to use the new serialize method in the serialization provider
Refactored the resultSerializer so majority of code can be shared between both implementations (for example file save dialog -> save -> show file on completion)

* Update to latest SQLToolsService release
This commit is contained in:
Kevin Cunnane
2019-08-09 11:37:53 -07:00
committed by GitHub
parent b589abbea5
commit fb7ece006d
20 changed files with 482 additions and 253 deletions

View File

@@ -1,6 +1,6 @@
{
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
"version": "1.5.0-alpha.110",
"version": "2.0.0-release.2",
"downloadFileNames": {
"Windows_86": "win-x86-netcoreapp2.2.zip",
"Windows_64": "win-x64-netcoreapp2.2.zip",

View File

@@ -518,3 +518,13 @@ export namespace SchemaCompareCancellationRequest {
}
// ------------------------------- <Schema Compare> -----------------------------
// ------------------------------- <Serialization> -----------------------------
export namespace SerializeDataStartRequest {
export const type = new RequestType<azdata.SerializeDataStartRequestParams, azdata.SerializeDataResult, void, void>('serialize/start');
}
export namespace SerializeDataContinueRequest {
export const type = new RequestType<azdata.SerializeDataContinueRequestParams, azdata.SerializeDataResult, void, void>('serialize/continue');
}
// ------------------------------- <Serialization> -----------------------------

View File

@@ -817,3 +817,65 @@ export class AgentServicesFeature extends SqlOpsFeature<undefined> {
});
}
}
export class SerializationFeature extends SqlOpsFeature<undefined> {
private static readonly messageTypes: RPCMessageType[] = [
contracts.SerializeDataStartRequest.type,
contracts.SerializeDataContinueRequest.type,
];
constructor(client: SqlOpsDataClient) {
super(client, SerializationFeature.messageTypes);
}
public fillClientCapabilities(capabilities: ClientCapabilities): void {
}
public initialize(capabilities: ServerCapabilities): void {
this.register(this.messages, {
id: UUID.generateUuid(),
registerOptions: undefined
});
}
protected registerProvider(options: undefined): Disposable {
const client = this._client;
let startSerialization = (requestParams: azdata.SerializeDataStartRequestParams): Thenable<azdata.SerializeDataResult> => {
return client.sendRequest(contracts.SerializeDataStartRequest.type, requestParams).then(
r => {
return r;
},
e => {
client.logFailedRequest(contracts.SerializeDataStartRequest.type, e);
return Promise.resolve(<azdata.SerializeDataResult>{
succeeded: false,
messages: Utils.getErrorMessage(e)
});
}
);
};
let continueSerialization = (requestParams: azdata.SerializeDataContinueRequestParams): Thenable<azdata.SerializeDataResult> => {
return client.sendRequest(contracts.SerializeDataContinueRequest.type, requestParams).then(
r => {
return r;
},
e => {
client.logFailedRequest(contracts.SerializeDataContinueRequest.type, e);
return Promise.resolve(<azdata.SerializeDataResult>{
succeeded: false,
messages: Utils.getErrorMessage(e)
});
}
);
};
return azdata.dataprotocol.registerSerializationProvider({
providerId: client.providerId,
startSerialization,
continueSerialization
});
}
}

View File

@@ -21,7 +21,7 @@ import { CredentialStore } from './credentialstore/credentialstore';
import { AzureResourceProvider } from './resourceProvider/resourceProvider';
import * as Utils from './utils';
import { Telemetry, LanguageClientErrorHandler } from './telemetry';
import { TelemetryFeature, AgentServicesFeature, DacFxServicesFeature, SchemaCompareServicesFeature } from './features';
import { TelemetryFeature, AgentServicesFeature, DacFxServicesFeature, SchemaCompareServicesFeature, SerializationFeature } from './features';
import { AppContext } from './appContext';
import { ApiWrapper } from './apiWrapper';
import { UploadFilesCommand, MkDirCommand, SaveFileCommand, PreviewFileCommand, CopyPathCommand, DeleteFilesCommand } from './objectExplorerNodeProvider/hdfsCommands';
@@ -155,7 +155,8 @@ function getClientOptions(): ClientOptions {
TelemetryFeature,
AgentServicesFeature,
DacFxServicesFeature,
SchemaCompareServicesFeature
SchemaCompareServicesFeature,
SerializationFeature
],
outputChannel: new CustomOutputChannel()
};