Initial changes for adding SqlProjectsService (#21967)

* Add SqlProjectsService

* cleanup

* reorder imports

* undo changes in project.ts for now to fix tests
This commit is contained in:
Kim Santiago
2023-02-16 17:15:24 -08:00
committed by GitHub
parent 199f280586
commit c5fc37c373
7 changed files with 103 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ export const sqlProviderName = 'MSSQL';
export const ObjectExplorerService = 'objectexplorer';
export const CmsService = 'cmsService';
export const DacFxService = 'dacfxService';
export const SqlProjectsService = 'sqlProjectsService';
export const SchemaCompareService = 'schemaCompareService';
export const LanguageExtensionService = 'languageExtensionService';
export const objectExplorerPrefix: string = 'objectexplorer://';

View File

@@ -601,6 +601,22 @@ export namespace SavePublishProfileRequest {
// ------------------------------- </ DacFx > ------------------------------------
// ------------------------------- < Sql Projects > ------------------------------------
export namespace OpenSqlProjectRequest {
export const type = new RequestType<SqlProjectParams, azdata.ResultStatus, void, void>('sqlProjects/openProject');
}
export namespace GetCrossPlatformCompatiblityRequest {
export const type = new RequestType<SqlProjectParams, mssql.GetCrossPlatformCompatiblityResult, void, void>('sqlProjects/getCrossPlatformCompatibility');
}
export interface SqlProjectParams {
projectUri: string;
}
// ------------------------------- </ Sql Projects > -----------------------------------
// ------------------------------- <CMS> ----------------------------------------

View File

@@ -40,6 +40,8 @@ declare module 'mssql' {
readonly dacFx: IDacFxService;
readonly sqlProjects: ISqlProjectsService;
readonly sqlAssessment: ISqlAssessmentService;
readonly sqlMigration: ISqlMigrationService;
@@ -314,6 +316,19 @@ declare module 'mssql' {
//#endregion
//#region --- Sql Projects
export interface ISqlProjectsService {
openProject(projectUri: string): Promise<azdata.ResultStatus>;
getCrossPlatformCompatiblityRequest(projectUri: string): Promise<GetCrossPlatformCompatiblityResult>;
}
export interface GetCrossPlatformCompatiblityResult extends azdata.ResultStatus {
isCrossPlatformCompatible: boolean;
}
//#endregion
//#region --- Language Extensibility
export interface ExternalLanguageContent {
pathToExtension: string;

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { AppContext } from './appContext';
import { IExtension, ICmsService, IDacFxService, ISchemaCompareService, ILanguageExtensionService, ISqlAssessmentService, ISqlMigrationService, IAzureBlobService, ITdeMigrationService } from 'mssql';
import { IExtension, ICmsService, IDacFxService, ISqlProjectsService, ISchemaCompareService, ILanguageExtensionService, ISqlAssessmentService, ISqlMigrationService, IAzureBlobService, ITdeMigrationService } from 'mssql';
import * as constants from './constants';
import { SqlToolsServer } from './sqlToolsServer';
@@ -19,6 +19,9 @@ export function createMssqlApi(context: AppContext, sqlToolsServer: SqlToolsServ
get dacFx() {
return context.getService<IDacFxService>(constants.DacFxService);
},
get sqlProjects() {
return context.getService<ISqlProjectsService>(constants.SqlProjectsService);
},
get schemaCompare() {
return context.getService<ISchemaCompareService>(constants.SchemaCompareService);
},

View File

@@ -0,0 +1,57 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as mssql from 'mssql';
import * as constants from '../constants';
import * as Utils from '../utils';
import * as azdata from 'azdata';
import * as contracts from '../contracts';
import { AppContext } from '../appContext';
import { ISqlOpsFeature, SqlOpsDataClient } from 'dataprotocol-client';
import { ClientCapabilities } from 'vscode-languageclient';
export class SqlProjectsService implements mssql.ISqlProjectsService {
public static asFeature(context: AppContext): ISqlOpsFeature {
return class extends SqlProjectsService {
constructor(client: SqlOpsDataClient) {
super(context, client);
}
fillClientCapabilities(capabilities: ClientCapabilities): void {
Utils.ensure(capabilities, 'sqlProjects')!.sqlProjects = true;
}
initialize(): void {
}
};
}
private constructor(context: AppContext, protected readonly client: SqlOpsDataClient) {
context.registerService(constants.SqlProjectsService, this);
}
public async openProject(projectUri: string): Promise<azdata.ResultStatus> {
const params: contracts.SqlProjectParams = { projectUri };
try {
const result = await this.client.sendRequest(contracts.OpenSqlProjectRequest.type, params);
return result;
} catch (e) {
this.client.logFailedRequest(contracts.OpenSqlProjectRequest.type, e);
throw e;
}
}
public async getCrossPlatformCompatiblityRequest(projectUri: string): Promise<mssql.GetCrossPlatformCompatiblityResult> {
const params: contracts.SqlProjectParams = { projectUri };
try {
const result = await this.client.sendRequest(contracts.GetCrossPlatformCompatiblityRequest.type, params);
return result;
} catch (e) {
this.client.logFailedRequest(contracts.GetCrossPlatformCompatiblityRequest.type, e);
throw e;
}
}
}

View File

@@ -30,6 +30,7 @@ import { SqlCredentialService } from './credentialstore/sqlCredentialService';
import { AzureBlobService } from './azureBlob/azureBlobService';
import { ErrorDiagnosticsProvider } from './errorDiagnostics/errorDiagnosticsProvider';
import { TdeMigrationService } from './tdeMigration/tdeMigrationService';
import { SqlProjectsService } from './sqlProjects/sqlProjectsService';
const localize = nls.loadMessageBundle();
const outputChannel = vscode.window.createOutputChannel(Constants.serviceName);
@@ -188,6 +189,7 @@ function getClientOptions(context: AppContext): ClientOptions {
SchemaCompareService.asFeature(context),
LanguageExtensionService.asFeature(context),
DacFxService.asFeature(context),
SqlProjectsService.asFeature(context),
CmsService.asFeature(context),
SqlAssessmentService.asFeature(context),
NotebookConvertService.asFeature(context),

View File

@@ -302,6 +302,14 @@ export async function getSchemaCompareService(): Promise<ISchemaCompareService>
}
}
export async function getSqlProjectsService(): Promise<mssql.ISqlProjectsService> {
const ext = vscode.extensions.getExtension(mssql.extension.name) as vscode.Extension<mssql.IExtension>;
const api = await ext.activate();
return api.sqlProjects;
// TODO: add vscode-mssql support
}
export async function getVscodeMssqlApi(): Promise<vscodeMssql.IExtension> {
const ext = vscode.extensions.getExtension(vscodeMssql.extension.name) as vscode.Extension<vscodeMssql.IExtension>;
return ext.activate();