Notebooks: fix save as csv/excel/json/xml (#14882)

* add getEncoding method to notebooks

* fix row 501 missing in serialization

* fix row index

* pr comment
This commit is contained in:
Lucy Zhang
2021-03-29 07:14:49 -07:00
committed by GitHub
parent ca19f08582
commit dd5adad772
4 changed files with 15 additions and 4 deletions

View File

@@ -119,6 +119,10 @@ export class SerializationService implements ISerializationService {
let index = 0; let index = 0;
let startRequestParams = this.createStartRequest(serializationRequest, index); let startRequestParams = this.createStartRequest(serializationRequest, index);
index = index + startRequestParams.rows.length; index = index + startRequestParams.rows.length;
// Adjust row index based on whether or not header row is included
if (serializationRequest.includeHeaders) {
index--;
}
let startResult = await provider.startSerialization(startRequestParams); let startResult = await provider.startSerialization(startRequestParams);

View File

@@ -45,4 +45,8 @@ export class FileNotebookInput extends NotebookInput {
public getTypeId(): string { public getTypeId(): string {
return FileNotebookInput.ID; return FileNotebookInput.ID;
} }
public getEncoding(): string | undefined {
return this.textInput.getEncoding();
}
} }

View File

@@ -42,4 +42,8 @@ export class UntitledNotebookInput extends NotebookInput {
public getTypeId(): string { public getTypeId(): string {
return UntitledNotebookInput.ID; return UntitledNotebookInput.ID;
} }
public getEncoding(): string | undefined {
return this.textInput.getEncoding();
}
} }

View File

@@ -8,7 +8,6 @@ import { localize } from 'vs/nls';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { Table } from 'sql/base/browser/ui/table/table'; import { Table } from 'sql/base/browser/ui/table/table';
import { QueryEditor } from './queryEditor'; import { QueryEditor } from './queryEditor';
import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/untitledQueryEditorInput';
import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin'; import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin';
import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider'; import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider';
import { INotificationService, Severity, NeverShowAgainScope } from 'vs/platform/notification/common/notification'; import { INotificationService, Severity, NeverShowAgainScope } from 'vs/platform/notification/common/notification';
@@ -20,6 +19,7 @@ import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
import { getErrorMessage } from 'vs/base/common/errors'; import { getErrorMessage } from 'vs/base/common/errors';
import { SaveFormat } from 'sql/workbench/services/query/common/resultSerializer'; import { SaveFormat } from 'sql/workbench/services/query/common/resultSerializer';
import { IExtensionRecommendationsService } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations'; import { IExtensionRecommendationsService } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations';
import { IEncodingSupport } from 'vs/workbench/common/editor';
export interface IGridActionContext { export interface IGridActionContext {
gridDataProvider: IGridDataProvider; gridDataProvider: IGridDataProvider;
@@ -70,9 +70,8 @@ export class SaveResultAction extends Action {
public async run(context: IGridActionContext): Promise<boolean> { public async run(context: IGridActionContext): Promise<boolean> {
const activeEditor = this.editorService.activeEditorPane as QueryEditor; const activeEditor = this.editorService.activeEditorPane as unknown as IEncodingSupport;
let input = activeEditor.input as UntitledQueryEditorInput; if (typeof activeEditor.getEncoding === 'function' && activeEditor.getEncoding() !== 'utf8') {
if (input.getEncoding() !== 'utf8') {
this.notificationService.notify({ this.notificationService.notify({
severity: Severity.Info, severity: Severity.Info,
message: localize('jsonEncoding', "Results encoding will not be saved when exporting to JSON, remember to save with desired encoding once file is created."), message: localize('jsonEncoding', "Results encoding will not be saved when exporting to JSON, remember to save with desired encoding once file is created."),