diff --git a/extensions/mssql/src/contextProvider.ts b/extensions/mssql/src/contextProvider.ts index 3d4a99143c..cf6007fc02 100644 --- a/extensions/mssql/src/contextProvider.ts +++ b/extensions/mssql/src/contextProvider.ts @@ -37,22 +37,17 @@ export default class ContextProvider { } public onDashboardOpen(e: azdata.DashboardDocument): void { - let iscloud: boolean; - let edition: number; - let serverMajorVersion: number; + let isCloud: boolean = false; + let edition: number | undefined; + let serverMajorVersion: number | undefined; if (e.profile.providerName.toLowerCase() === 'mssql' && !types.isUndefinedOrNull(e.serverInfo) && !types.isUndefinedOrNull(e.serverInfo.engineEditionId)) { - if (isCloudEditions.some(i => i === e.serverInfo.engineEditionId)) { - iscloud = true; - } else { - iscloud = false; - } - + isCloud = isCloudEditions.some(i => i === e.serverInfo.engineEditionId); edition = e.serverInfo.engineEditionId; serverMajorVersion = e.serverInfo.serverMajorVersion; } - if (iscloud === true || iscloud === false) { - void setCommandContext(ContextKeys.ISCLOUD, iscloud); + if (isCloud === true || isCloud === false) { + void setCommandContext(ContextKeys.ISCLOUD, isCloud); } if (!types.isUndefinedOrNull(edition)) { diff --git a/extensions/mssql/src/contracts.ts b/extensions/mssql/src/contracts.ts index cf78e955de..5299d17357 100644 --- a/extensions/mssql/src/contracts.ts +++ b/extensions/mssql/src/contracts.ts @@ -387,7 +387,7 @@ export namespace UpdateAgentNotebookRunPinRequest { } export namespace AgentNotebookTemplateRequest { - export const type = new RequestType('agent/notebooktemplate'); + export const type = new RequestType('agent/notebooktemplate'); } export namespace CreateAgentNotebookRequest { diff --git a/extensions/mssql/src/features.ts b/extensions/mssql/src/features.ts index 6619dcded5..b0a106707f 100644 --- a/extensions/mssql/src/features.ts +++ b/extensions/mssql/src/features.ts @@ -192,12 +192,12 @@ export class AgentServicesFeature extends SqlOpsFeature { // Job management methods let getJobs = (ownerUri: string): Thenable => { - let params: contracts.AgentJobsParams = { ownerUri: ownerUri, jobId: null }; + let params: contracts.AgentJobsParams = { ownerUri: ownerUri, jobId: '' }; return client.sendRequest(contracts.AgentJobsRequest.type, params).then( r => r, e => { client.logFailedRequest(contracts.AgentJobsRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -209,7 +209,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.AgentJobHistoryRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -220,7 +220,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.AgentJobActionRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -238,7 +238,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -257,7 +257,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -275,7 +275,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -289,7 +289,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -308,7 +308,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -327,7 +327,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -345,7 +345,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -357,7 +357,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.AgentNotebooksRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -370,7 +370,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.AgentNotebookHistoryRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -382,7 +382,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.AgentNotebookMaterializedRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -394,7 +394,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.AgentNotebookTemplateRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -413,7 +413,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -434,7 +434,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -452,7 +452,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -464,7 +464,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.DeleteMaterializedNotebookRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -476,7 +476,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.UpdateAgentNotebookRunNameRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -488,7 +488,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(contracts.UpdateAgentNotebookRunPinRequest.type, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -505,7 +505,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -523,7 +523,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -542,7 +542,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -560,7 +560,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -575,7 +575,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -593,7 +593,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -612,7 +612,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -630,7 +630,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -645,12 +645,12 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; - let createProxy = (ownerUri: string, proxyInfo: azdata.AgentProxyInfo): Thenable => { + let createProxy = (ownerUri: string, proxyInfo: azdata.AgentProxyInfo): Thenable => { let params: contracts.CreateAgentProxyParams = { ownerUri: ownerUri, proxy: proxyInfo @@ -663,12 +663,12 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; - let updateProxy = (ownerUri: string, originalProxyName: string, proxyInfo: azdata.AgentProxyInfo): Thenable => { + let updateProxy = (ownerUri: string, originalProxyName: string, proxyInfo: azdata.AgentProxyInfo): Thenable => { let params: contracts.UpdateAgentProxyParams = { ownerUri: ownerUri, originalProxyName: originalProxyName, @@ -682,7 +682,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -700,7 +700,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -715,7 +715,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -731,7 +731,7 @@ export class AgentServicesFeature extends SqlOpsFeature { r => r, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -749,7 +749,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -768,7 +768,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -786,7 +786,7 @@ export class AgentServicesFeature extends SqlOpsFeature { }, e => { client.logFailedRequest(requestType, e); - return Promise.resolve(undefined); + return Promise.reject(e); } ); }; @@ -926,9 +926,8 @@ export class SqlAssessmentServicesFeature extends SqlOpsFeature { } catch (e) { client.logFailedRequest(contracts.SqlAssessmentInvokeRequest.type, e); + throw e; } - - return undefined; }; let getAssessmentItems = async (ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise => { @@ -938,9 +937,8 @@ export class SqlAssessmentServicesFeature extends SqlOpsFeature { } catch (e) { client.logFailedRequest(contracts.GetSqlAssessmentItemsRequest.type, e); + throw e; } - - return undefined; }; let generateAssessmentScript = async (items: azdata.SqlAssessmentResultItem[]): Promise => { @@ -950,9 +948,8 @@ export class SqlAssessmentServicesFeature extends SqlOpsFeature { } catch (e) { client.logFailedRequest(contracts.GenerateSqlAssessmentScriptRequest.type, e); + throw e; } - - return undefined; }; return azdata.dataprotocol.registerSqlAssessmentServicesProvider({ @@ -1062,7 +1059,7 @@ export class ProfilerFeature extends SqlOpsFeature { }; let connectSession = (sessionId: string): Thenable => { - return undefined; + return Promise.resolve(false); }; let disconnectSession = (ownerUri: string): Thenable => { diff --git a/extensions/mssql/src/localizedConstants.ts b/extensions/mssql/src/localizedConstants.ts index e620a7d282..25ffb813b1 100644 --- a/extensions/mssql/src/localizedConstants.ts +++ b/extensions/mssql/src/localizedConstants.ts @@ -10,3 +10,6 @@ export function failedToFindTenants(tenantId: string, accountName: string): stri export function tokenRefreshFailed(name: string): string { return localize('mssql.tokenRefreshFailed', "{0} AAD token refresh failed, please reconnect to enable {0}", name); } export const tokenRefreshFailedNoSecurityToken = localize('mssql.tokenRefreshFailedNoSecurityToken', "Editor token refresh failed, autocompletion will be disabled until the editor is disconnected and reconnected"); export function failedToFindAccount(accountName: string) { return localize('mssql.failedToFindAccount', "Failed to find azure account {0} when executing token refresh", accountName); } +export const noConvertResult = localize('mssql.noConvertResult', "No result returned from Notebook convert request") +export function noDocumentFound(uri: string): string { return localize('mssql.noDocumentFound', "No document found for URI {0}", uri); } +export function unsupportedPlatform(platform: string): string { return localize('mssql.unsupportedPlatform', "Unsupported platform {0}", platform); } diff --git a/extensions/mssql/src/main.ts b/extensions/mssql/src/main.ts index b7b8967f6c..aa1e1f8ccf 100644 --- a/extensions/mssql/src/main.ts +++ b/extensions/mssql/src/main.ts @@ -6,6 +6,7 @@ import * as vscode from 'vscode'; import * as azdata from 'azdata'; import * as path from 'path'; +import * as os from 'os'; import * as Constants from './constants'; import ContextProvider from './contextProvider'; @@ -25,6 +26,7 @@ import { registerTableDesignerCommands } from './tableDesigner/tableDesigner'; // import { SqlNotebookController } from './sqlNotebook/sqlNotebookController'; import { registerObjectManagementCommands } from './objectManagement/commands'; import { TelemetryActions, TelemetryReporter, TelemetryViews } from './telemetry'; +import { noConvertResult, noDocumentFound, unsupportedPlatform } from './localizedConstants'; const localize = nls.loadMessageBundle(); @@ -33,8 +35,9 @@ export async function activate(context: vscode.ExtensionContext): Promise { try { const result = await appContext.getService(Constants.NotebookConvertService).convertSqlToNotebook(uri.toString()); + if (!result) { + throw new Error(noConvertResult); + } const title = findNextUntitledEditorName(); const untitledUri = vscode.Uri.parse(`untitled:${title}`); await azdata.nb.showNotebookDocument(untitledUri, { initialContent: result.content }); @@ -82,7 +88,13 @@ export async function activate(context: vscode.ExtensionContext): Promise doc.uri.toString() === uri.toString()); + if (!doc) { + throw new Error(noDocumentFound(uri.toString())); + } const result = await appContext.getService(Constants.NotebookConvertService).convertNotebookToSql(doc.getText()); + if (!result) { + throw new Error(noConvertResult); + } await azdata.queryeditor.openQueryDocument({ content: result.content }); } catch (err) { void vscode.window.showErrorMessage(localize('mssql.errorConvertingToSQL', "An error occurred converting the Notebook document to SQL. Error : {0}", err.toString())); diff --git a/extensions/mssql/src/telemetry.ts b/extensions/mssql/src/telemetry.ts index c02f693de8..6b38aa1c99 100644 --- a/extensions/mssql/src/telemetry.ts +++ b/extensions/mssql/src/telemetry.ts @@ -25,8 +25,8 @@ export const TelemetryReporter = new AdsTelemetryReporter(packag export function fillServerInfo(telemetryInfo: { [key: string]: string }, serverInfo: ServerInfo): void { telemetryInfo['serverEdition'] = serverInfo?.serverEdition; telemetryInfo['serverLevel'] = serverInfo?.serverLevel; - telemetryInfo['serverMajorVersion'] = serverInfo?.serverMajorVersion.toString(); - telemetryInfo['serverMinorVersion'] = serverInfo?.serverMinorVersion.toString(); + telemetryInfo['serverMajorVersion'] = serverInfo?.serverMajorVersion?.toString() || ''; + telemetryInfo['serverMinorVersion'] = serverInfo?.serverMinorVersion?.toString() || ''; telemetryInfo['isCloud'] = serverInfo?.isCloud.toString(); } diff --git a/src/sql/azdata.d.ts b/src/sql/azdata.d.ts index 7500d8a5c5..6a6262e3da 100644 --- a/src/sql/azdata.d.ts +++ b/src/sql/azdata.d.ts @@ -1947,8 +1947,8 @@ declare module 'azdata' { // Proxy management methods getProxies(ownerUri: string): Thenable; - createProxy(ownerUri: string, proxyInfo: AgentProxyInfo): Thenable; - updateProxy(ownerUri: string, originalProxyName: string, proxyInfo: AgentProxyInfo): Thenable; + createProxy(ownerUri: string, proxyInfo: AgentProxyInfo): Thenable; + updateProxy(ownerUri: string, originalProxyName: string, proxyInfo: AgentProxyInfo): Thenable; deleteProxy(ownerUri: string, proxyInfo: AgentProxyInfo): Thenable; // Credential method