diff --git a/extensions/mssql/src/main.ts b/extensions/mssql/src/main.ts index be621b3864..c84abe96a3 100644 --- a/extensions/mssql/src/main.ts +++ b/extensions/mssql/src/main.ts @@ -104,7 +104,7 @@ export async function activate(context: vscode.ExtensionContext): Promise(constants.CmsService); }, diff --git a/extensions/mssql/src/sqlToolsServer.ts b/extensions/mssql/src/sqlToolsServer.ts index eea161cc1b..e35796d3a0 100644 --- a/extensions/mssql/src/sqlToolsServer.ts +++ b/extensions/mssql/src/sqlToolsServer.ts @@ -35,13 +35,15 @@ export class SqlToolsServer { private client: SqlOpsDataClient; private config: IConfig; private disposables = new Array<{ dispose: () => void }>(); + public installDirectory: string | undefined = undefined; public async start(context: AppContext): Promise { try { const installationStart = Date.now(); - const path = await this.download(context); + const serverPath = await this.download(context); + this.installDirectory = path.dirname(serverPath); const installationComplete = Date.now(); - let serverOptions = generateServerOptions(context.extensionContext.logPath, path); + let serverOptions = generateServerOptions(context.extensionContext.logPath, serverPath); let clientOptions = getClientOptions(context); this.client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions); const processStart = Date.now(); diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index 49fafd23a3..6ee7a30f95 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -262,7 +262,7 @@ export function invalidInput(input: string) { return localize('invalidInput', "I export function invalidProjectPropertyValue(propertyName: string) { return localize('invalidPropertyValue', "Invalid value specified for the property '{0}' in .sqlproj file", propertyName); } export function unableToCreatePublishConnection(input: string) { return localize('unableToCreatePublishConnection', "Unable to construct connection: {0}", input); } export function circularProjectReference(project1: string, project2: string) { return localize('cicularProjectReference', "Circular reference from project {0} to project {1}", project1, project2); } -export function sqlToolsServiceNotFound(sqlToolsServiceDir: string) { return localize('mssqlNotFound', "Could not get SQL Tools Service install location at {0}", sqlToolsServiceDir); } +export function errorFindingBuildFilesLocation(err: any) { return localize('errorFindingBuildFilesLocation', "Error finding build files location: {0}", utils.getErrorMessage(err)); } export function projBuildFailed(errorMessage: string) { return localize('projBuildFailed', "Build failed. Check output pane for more details. {0}", errorMessage); } export function unexpectedProjectContext(uri: string) { return localize('unexpectedProjectContext', "Unable to establish project context. Command invoked from unexpected location: {0}", uri); } export function unableToPerformAction(action: string, uri: string) { return localize('unableToPerformAction', "Unable to locate '{0}' target: '{1}'", action, uri); } diff --git a/extensions/sql-database-projects/src/tools/buildHelper.ts b/extensions/sql-database-projects/src/tools/buildHelper.ts index a9a94b1028..c69bc6c6f8 100644 --- a/extensions/sql-database-projects/src/tools/buildHelper.ts +++ b/extensions/sql-database-projects/src/tools/buildHelper.ts @@ -5,10 +5,9 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import * as os from 'os'; import { promises as fs } from 'fs'; import * as utils from '../common/utils'; -import { sqlToolsServiceNotFound } from '../common/constants'; +import { errorFindingBuildFilesLocation } from '../common/constants'; import * as mssql from '../../../mssql/src/mssql'; import * as vscodeMssql from 'vscode-mssql'; import * as sqldbproj from 'sqldbproj'; @@ -66,41 +65,15 @@ export class BuildHelper { * @returns */ private async getBuildDirPathFromMssqlTools(): Promise { - let mssqlConfigDir = ''; - if (utils.getAzdataApi()) { - mssqlConfigDir = vscode.extensions.getExtension(mssql.extension.name)?.extensionPath ?? ''; - } else { - // VS Code MSSQL extension has its tools service config in a slightly different spot - mssqlConfigDir = path.join(vscode.extensions.getExtension(vscodeMssql.extension.name)?.extensionPath ?? '', 'out', 'src'); - } - - if (await utils.exists(path.join(mssqlConfigDir, 'config.json'))) { - const rawConfig = await fs.readFile(path.join(mssqlConfigDir, 'config.json')); - const config = JSON.parse(rawConfig.toString()); - let installDir = ''; + try { if (utils.getAzdataApi()) { - installDir = config.installDirectory?.replace('{#version#}', config.version).replace('{#platform#}', this.getPlatform()); + return (vscode.extensions.getExtension(mssql.extension.name)?.exports as mssql.IExtension).sqlToolsServicePath; } else { - // VS Code MSSQL extension has a slightly different format for its config.json - installDir = config.service?.installDir?.replace('{#version#}', config.service.version).replace('{#platform#}', this.getPlatform()); - if (installDir) { - // The path to the install location is relative to one directory above where the config is so account for that here - installDir = path.join('..', installDir); - } - } - - if (installDir) { - return path.join(mssqlConfigDir, installDir); + return (vscode.extensions.getExtension(vscodeMssql.extension.name)?.exports as vscodeMssql.IExtension).sqlToolsServicePath; } + } catch (err) { + throw new Error(errorFindingBuildFilesLocation(err)); } - throw new Error(sqlToolsServiceNotFound(mssqlConfigDir)); - } - - private getPlatform(): string { - return os.platform() === 'win32' ? 'Windows' : - os.platform() === 'darwin' ? 'OSX' : - os.platform() === 'linux' ? 'Linux' : - ''; } public get extensionBuildDirPath(): string { diff --git a/extensions/sql-database-projects/src/typings/vscode-mssql.d.ts b/extensions/sql-database-projects/src/typings/vscode-mssql.d.ts index 96c73ec415..a632e46e5a 100644 --- a/extensions/sql-database-projects/src/typings/vscode-mssql.d.ts +++ b/extensions/sql-database-projects/src/typings/vscode-mssql.d.ts @@ -24,6 +24,11 @@ declare module 'vscode-mssql' { */ export interface IExtension { + /** + * Path to the root of the SQL Tools Service folder + */ + readonly sqlToolsServicePath: string; + /** * Service for accessing DacFx functionality */