fix notebook serialization issue for non-mssql providers (#22504)

* use mssql as notebook serialization provider

* comment

* use fallback
This commit is contained in:
Alan Ren
2023-03-28 21:34:38 -07:00
committed by GitHub
parent 83e35ad7f8
commit afafee844c
2 changed files with 11 additions and 2 deletions

View File

@@ -49,6 +49,8 @@ export interface ISerializationService {
hasProvider(): boolean;
isProviderRegistered(providerId: string): boolean;
saveAs(saveFormat: string, savePath: string, results: string, appendToFile: boolean): Thenable<azdata.SaveResultRequestResult>;
disabledSaveAs(): Thenable<azdata.SaveResultRequestResult>;
@@ -75,6 +77,10 @@ export class SerializationService implements ISerializationService {
) {
}
public isProviderRegistered(providerId: string): boolean {
return this.providers.find(provider => provider.providerId.toUpperCase() === providerId.toUpperCase()) !== undefined;
}
public registerProvider(providerId: string, provider: azdata.SerializationProvider): void {
this.providers.push({ providerId: providerId, provider: provider });
}

View File

@@ -487,10 +487,13 @@ export class DataResourceDataProvider implements IGridDataProvider {
let connProviders = this.cellModel.notebookModel.getApplicableConnectionProviderIds(this.cellModel.notebookModel.selectedKernelDisplayName);
if (connProviders?.length > 0) {
provider = connProviders[0];
} else {
provider = mssqlProviderName;
}
}
if (!provider || !this._serializationService.isProviderRegistered(provider)) {
// Serializing notebook query results to file is agnostic of database engine since the data is already available in the notebook.
// If the provider doesn't have its own serializer we can let the mssql provider handle it.
provider = mssqlProviderName;
}
let formatSpecificParams = serializer.getBasicSaveParameters(format);
let formatAgnosticParams = <Partial<SerializeDataParams>>{
serializationProviderId: provider,