Fix copy on Linux (#24341)

* add return type for copy results from STS

* fix test error

* change Result type to CopyResultsRequestResult

* remove async

* bump data protocol client

* bump dataprotocol client version

* bump version in yarn.lock

* add async back
This commit is contained in:
Christopher Suh
2023-09-09 07:16:05 -04:00
committed by GitHub
parent b8629592d4
commit 5f45c000da
21 changed files with 55 additions and 38 deletions

View File

@@ -209,7 +209,7 @@
"update-grammar": "node ../../build/npm/update-grammar.js Microsoft/vscode-azuremonitor ./syntaxes/azuremonitor.tmLanguage" "update-grammar": "node ../../build/npm/update-grammar.js Microsoft/vscode-azuremonitor ./syntaxes/azuremonitor.tmLanguage"
}, },
"dependencies": { "dependencies": {
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.6", "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.7",
"figures": "^2.0.0", "figures": "^2.0.0",
"find-remove": "1.2.1", "find-remove": "1.2.1",
"@microsoft/ads-service-downloader": "^1.2.1", "@microsoft/ads-service-downloader": "^1.2.1",

View File

@@ -75,9 +75,9 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.6": "dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.7":
version "1.3.6" version "1.3.7"
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/fdd415fd7c79c5c889f192a9122ba41dca66b35b" resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/0f07d03394eeebc2924971746470ac8224348fa4"
dependencies: dependencies:
vscode-languageclient "5.2.1" vscode-languageclient "5.2.1"

View File

@@ -107,7 +107,7 @@
"dependencies": { "dependencies": {
"@microsoft/ads-extension-telemetry": "^3.0.1", "@microsoft/ads-extension-telemetry": "^3.0.1",
"@microsoft/ads-service-downloader": "^1.2.1", "@microsoft/ads-service-downloader": "^1.2.1",
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.6", "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.7",
"vscode-nls": "^5.2.0" "vscode-nls": "^5.2.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -497,9 +497,9 @@ crypt@0.0.2:
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.6": "dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.7":
version "1.3.6" version "1.3.7"
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/fdd415fd7c79c5c889f192a9122ba41dca66b35b" resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/0f07d03394eeebc2924971746470ac8224348fa4"
dependencies: dependencies:
vscode-languageclient "5.2.1" vscode-languageclient "5.2.1"

View File

@@ -77,7 +77,7 @@
} }
}, },
"dependencies": { "dependencies": {
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.6", "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.7",
"htmlparser2": "^3.10.1", "htmlparser2": "^3.10.1",
"@microsoft/ads-service-downloader": "^1.2.1", "@microsoft/ads-service-downloader": "^1.2.1",
"@microsoft/ads-extension-telemetry": "^3.0.1", "@microsoft/ads-extension-telemetry": "^3.0.1",

View File

@@ -78,7 +78,7 @@ export class TestQueryProvider implements azdata.QueryProvider {
saveResults(requestParams: azdata.SaveResultsRequestParams): Thenable<azdata.SaveResultRequestResult> { saveResults(requestParams: azdata.SaveResultsRequestParams): Thenable<azdata.SaveResultRequestResult> {
throw new Error('Method not implemented.'); throw new Error('Method not implemented.');
} }
copyResults(requestParams: azdata.CopyResultsRequestParams): Thenable<void> { copyResults(requestParams: azdata.CopyResultsRequestParams): Thenable<azdata.CopyResultsRequestResult> {
throw new Error('Method not implemented.'); throw new Error('Method not implemented.');
} }
setQueryExecutionOptions(ownerUri: string, options: azdata.QueryExecutionOptions): Thenable<void> { setQueryExecutionOptions(ownerUri: string, options: azdata.QueryExecutionOptions): Thenable<void> {

View File

@@ -572,9 +572,9 @@ crypt@~0.0.1:
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.6": "dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.7":
version "1.3.6" version "1.3.7"
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/fdd415fd7c79c5c889f192a9122ba41dca66b35b" resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/0f07d03394eeebc2924971746470ac8224348fa4"
dependencies: dependencies:
vscode-languageclient "5.2.1" vscode-languageclient "5.2.1"

View File

@@ -427,7 +427,7 @@
} }
}, },
"dependencies": { "dependencies": {
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.6", "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.7",
"figures": "^2.0.0", "figures": "^2.0.0",
"find-remove": "1.2.1", "find-remove": "1.2.1",
"@microsoft/ads-service-downloader": "^1.2.1", "@microsoft/ads-service-downloader": "^1.2.1",

View File

@@ -124,9 +124,9 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.6": "dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.7":
version "1.3.6" version "1.3.7"
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/fdd415fd7c79c5c889f192a9122ba41dca66b35b" resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/0f07d03394eeebc2924971746470ac8224348fa4"
dependencies: dependencies:
vscode-languageclient "5.2.1" vscode-languageclient "5.2.1"

View File

@@ -1567,7 +1567,7 @@
"dependencies": { "dependencies": {
"@microsoft/ads-extension-telemetry": "^3.0.1", "@microsoft/ads-extension-telemetry": "^3.0.1",
"@microsoft/ads-service-downloader": "^1.2.1", "@microsoft/ads-service-downloader": "^1.2.1",
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.6", "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.7",
"find-remove": "1.2.1", "find-remove": "1.2.1",
"vscode-languageclient": "5.2.1", "vscode-languageclient": "5.2.1",
"vscode-nls": "^4.0.0" "vscode-nls": "^4.0.0"

View File

@@ -511,9 +511,9 @@ crypt@~0.0.1:
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.6": "dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.7":
version "1.3.6" version "1.3.7"
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/fdd415fd7c79c5c889f192a9122ba41dca66b35b" resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/0f07d03394eeebc2924971746470ac8224348fa4"
dependencies: dependencies:
vscode-languageclient "5.2.1" vscode-languageclient "5.2.1"

View File

@@ -162,7 +162,7 @@
] ]
}, },
"dependencies": { "dependencies": {
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.6", "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#1.3.7",
"@microsoft/ads-service-downloader": "^1.2.1", "@microsoft/ads-service-downloader": "^1.2.1",
"@microsoft/ads-extension-telemetry": "^3.0.1", "@microsoft/ads-extension-telemetry": "^3.0.1",
"uuid": "^8.3.2", "uuid": "^8.3.2",

View File

@@ -62,9 +62,9 @@ chownr@^2.0.0:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.6": "dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#1.3.7":
version "1.3.6" version "1.3.7"
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/fdd415fd7c79c5c889f192a9122ba41dca66b35b" resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/0f07d03394eeebc2924971746470ac8224348fa4"
dependencies: dependencies:
vscode-languageclient "5.2.1" vscode-languageclient "5.2.1"

View File

@@ -873,6 +873,13 @@ declare module 'azdata' {
selections: SelectionRange[]; selections: SelectionRange[];
} }
export interface CopyResultsRequestResult {
/**
* Result string from copy operation
*/
results: string;
}
export interface QueryProvider { export interface QueryProvider {
/** /**
* Notify clients that the URI for a connection has been changed. * Notify clients that the URI for a connection has been changed.
@@ -884,7 +891,7 @@ declare module 'azdata' {
* ADS will use this if 'supportCopyResultsToClipboard' property is set to true in the provider contribution point in extension's package.json. * ADS will use this if 'supportCopyResultsToClipboard' property is set to true in the provider contribution point in extension's package.json.
* Otherwise, The default handler will load all the selected data to ADS and perform the copy operation. * Otherwise, The default handler will load all the selected data to ADS and perform the copy operation.
*/ */
copyResults?(requestParams: CopyResultsRequestParams): Thenable<void>; copyResults?(requestParams: CopyResultsRequestParams): Thenable<CopyResultsRequestResult>;
} }
export enum DataProviderType { export enum DataProviderType {

View File

@@ -161,7 +161,7 @@ export class MainThreadDataProtocol extends Disposable implements MainThreadData
return Promise.resolve(self._serializationService.saveAs(requestParams.resultFormat, requestParams.filePath, undefined, true)); return Promise.resolve(self._serializationService.saveAs(requestParams.resultFormat, requestParams.filePath, undefined, true));
} }
}, },
copyResults(requestParams: azdata.CopyResultsRequestParams): Promise<void> { copyResults(requestParams: azdata.CopyResultsRequestParams): Promise<azdata.CopyResultsRequestResult> {
return Promise.resolve(self._proxy.$copyResults(handle, requestParams)); return Promise.resolve(self._proxy.$copyResults(handle, requestParams));
}, },
initializeEdit(ownerUri: string, schemaName: string, objectName: string, objectType: string, rowLimit: number, queryString: string): Promise<void> { initializeEdit(ownerUri: string, schemaName: string, objectName: string, objectType: string, rowLimit: number, queryString: string): Promise<void> {

View File

@@ -420,7 +420,7 @@ export class ExtHostDataProtocol extends ExtHostDataProtocolShape {
return this._resolveProvider<azdata.QueryProvider>(handle).saveResults(requestParams); return this._resolveProvider<azdata.QueryProvider>(handle).saveResults(requestParams);
} }
override $copyResults(handle: number, requestParams: azdata.CopyResultsRequestParams): Thenable<void> { override $copyResults(handle: number, requestParams: azdata.CopyResultsRequestParams): Thenable<azdata.CopyResultsRequestResult> {
const provider = this._resolveProvider<azdata.QueryProvider>(handle); const provider = this._resolveProvider<azdata.QueryProvider>(handle);
if (provider.copyResults) { if (provider.copyResults) {
return provider.copyResults(requestParams); return provider.copyResults(requestParams);

View File

@@ -254,7 +254,7 @@ export abstract class ExtHostDataProtocolShape {
/** /**
* Copies the selected data to clipboard. * Copies the selected data to clipboard.
*/ */
$copyResults(handle: number, requestParams: azdata.CopyResultsRequestParams): Thenable<void> { throw ni(); } $copyResults(handle: number, requestParams: azdata.CopyResultsRequestParams): Thenable<azdata.CopyResultsRequestResult> { throw ni(); }
/** /**
* Commits all pending edits in an edit session * Commits all pending edits in an edit session

View File

@@ -69,7 +69,7 @@ export interface IQueryManagementService {
changeConnectionUri(newUri: string, oldUri: string): Promise<void>; changeConnectionUri(newUri: string, oldUri: string): Promise<void>;
saveResults(requestParams: azdata.SaveResultsRequestParams): Promise<azdata.SaveResultRequestResult>; saveResults(requestParams: azdata.SaveResultsRequestParams): Promise<azdata.SaveResultRequestResult>;
setQueryExecutionOptions(uri: string, options: azdata.QueryExecutionOptions): Promise<void>; setQueryExecutionOptions(uri: string, options: azdata.QueryExecutionOptions): Promise<void>;
copyResults(params: azdata.CopyResultsRequestParams): Promise<void>; copyResults(params: azdata.CopyResultsRequestParams): Promise<azdata.CopyResultsRequestResult>;
// Callbacks // Callbacks
onQueryComplete(result: azdata.QueryExecuteCompleteNotificationResult): void; onQueryComplete(result: azdata.QueryExecuteCompleteNotificationResult): void;
@@ -108,7 +108,7 @@ export interface IQueryRequestHandler {
disposeQuery(ownerUri: string): Promise<void>; disposeQuery(ownerUri: string): Promise<void>;
connectionUriChanged(newUri: string, oldUri: string): Promise<void>; connectionUriChanged(newUri: string, oldUri: string): Promise<void>;
saveResults(requestParams: azdata.SaveResultsRequestParams): Promise<azdata.SaveResultRequestResult>; saveResults(requestParams: azdata.SaveResultsRequestParams): Promise<azdata.SaveResultRequestResult>;
copyResults(requestParams: azdata.CopyResultsRequestParams): Promise<void>; copyResults(requestParams: azdata.CopyResultsRequestParams): Promise<azdata.CopyResultsRequestResult>;
setQueryExecutionOptions(ownerUri: string, options: azdata.QueryExecutionOptions): Promise<void>; setQueryExecutionOptions(ownerUri: string, options: azdata.QueryExecutionOptions): Promise<void>;
// Edit Data actions // Edit Data actions
@@ -364,7 +364,7 @@ export class QueryManagementService implements IQueryManagementService {
}); });
} }
public copyResults(requestParams: azdata.CopyResultsRequestParams): Promise<void> { public copyResults(requestParams: azdata.CopyResultsRequestParams): Promise<azdata.CopyResultsRequestResult> {
return this._runAction(requestParams.ownerUri, (runner) => { return this._runAction(requestParams.ownerUri, (runner) => {
return runner.copyResults(requestParams); return runner.copyResults(requestParams);
}); });

View File

@@ -21,6 +21,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import EditQueryRunner from 'sql/workbench/services/editData/common/editQueryRunner'; import EditQueryRunner from 'sql/workbench/services/editData/common/editQueryRunner';
import { IRange } from 'vs/editor/common/core/range'; import { IRange } from 'vs/editor/common/core/range';
import { ClipboardData, IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
const selectionSnippetMaxLen = 100; const selectionSnippetMaxLen = 100;
@@ -82,6 +83,7 @@ export class QueryModelService implements IQueryModelService {
constructor( constructor(
@IInstantiationService private _instantiationService: IInstantiationService, @IInstantiationService private _instantiationService: IInstantiationService,
@INotificationService private _notificationService: INotificationService, @INotificationService private _notificationService: INotificationService,
@IClipboardService private _clipboardService: IClipboardService,
@ILogService private _logService: ILogService @ILogService private _logService: ILogService
) { ) {
this._queryInfoMap = new Map<string, QueryInfo>(); this._queryInfoMap = new Map<string, QueryInfo>();
@@ -170,7 +172,11 @@ export class QueryModelService implements IQueryModelService {
public async copyResults(uri: string, selection: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): Promise<void> { public async copyResults(uri: string, selection: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): Promise<void> {
if (this._queryInfoMap.has(uri)) { if (this._queryInfoMap.has(uri)) {
return this._queryInfoMap.get(uri)!.queryRunner!.copyResults(selection, batchId, resultId, includeHeaders); const results = await this._queryInfoMap.get(uri)!.queryRunner!.copyResults(selection, batchId, resultId, includeHeaders);
let clipboardData: ClipboardData = {
text: results.results
};
this._clipboardService.write(clipboardData);
} }
} }

View File

@@ -11,7 +11,7 @@ import { ResultSerializer, SaveFormat } from 'sql/workbench/services/query/commo
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { ClipboardData, IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import * as types from 'vs/base/common/types'; import * as types from 'vs/base/common/types';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { INotificationService } from 'vs/platform/notification/common/notification'; import { INotificationService } from 'vs/platform/notification/common/notification';
@@ -483,8 +483,8 @@ export default class QueryRunner extends Disposable {
* @param resultId The result id of the result to copy from * @param resultId The result id of the result to copy from
* @param includeHeaders [Optional]: Should column headers be included in the copy selection * @param includeHeaders [Optional]: Should column headers be included in the copy selection
*/ */
async copyResults(selections: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): Promise<void> { async copyResults(selections: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): Promise<azdata.CopyResultsRequestResult> {
await this.queryManagementService.copyResults({ return this.queryManagementService.copyResults({
ownerUri: this.uri, ownerUri: this.uri,
batchIndex: batchId, batchIndex: batchId,
resultSetIndex: resultId, resultSetIndex: resultId,
@@ -606,7 +606,11 @@ export class QueryGridDataProvider implements IGridDataProvider {
private async handleCopyRequestByProvider(selections: Slick.Range[], includeHeaders?: boolean): Promise<void> { private async handleCopyRequestByProvider(selections: Slick.Range[], includeHeaders?: boolean): Promise<void> {
executeCopyWithNotification(this._notificationService, this._configurationService, selections, async () => { executeCopyWithNotification(this._notificationService, this._configurationService, selections, async () => {
await this.queryRunner.copyResults(selections, this.batchId, this.resultSetId, this.shouldIncludeHeaders(includeHeaders)); let results = await this.queryRunner.copyResults(selections, this.batchId, this.resultSetId, this.shouldIncludeHeaders(includeHeaders));
let clipboardData: ClipboardData = {
text: results.results
}
this._clipboardService.write(clipboardData);
}); });
} }

View File

@@ -66,7 +66,7 @@ export class TestQueryManagementService implements IQueryManagementService {
saveResults(requestParams: azdata.SaveResultsRequestParams): Promise<azdata.SaveResultRequestResult> { saveResults(requestParams: azdata.SaveResultsRequestParams): Promise<azdata.SaveResultRequestResult> {
throw new Error('Method not implemented.'); throw new Error('Method not implemented.');
} }
copyResults(params: azdata.CopyResultsRequestParams): Promise<void> { copyResults(params: azdata.CopyResultsRequestParams): Promise<azdata.CopyResultsRequestResult> {
throw new Error('Method not implemented.'); throw new Error('Method not implemented.');
} }
setQueryExecutionOptions(uri: string, options: azdata.QueryExecutionOptions): Promise<void> { setQueryExecutionOptions(uri: string, options: azdata.QueryExecutionOptions): Promise<void> {