mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-25 01:25:36 -05:00
Required changes to make sql projects extension work with vscode (#22847)
* Update CreateProject api * More updates * Fix a few comments * Address comments * Remove package.json changes * Fix error * Fix testUtil
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { SystemDatabase } from 'mssql';
|
||||
import { Uri } from 'vscode';
|
||||
import { SystemDatabase } from '../common/typeHelper';
|
||||
|
||||
export interface IDatabaseReferenceSettings {
|
||||
databaseVariableLiteralValue?: string;
|
||||
|
||||
@@ -9,6 +9,7 @@ import * as utils from '../common/utils';
|
||||
import type * as azdataType from 'azdata';
|
||||
import * as vscode from 'vscode';
|
||||
import * as mssql from 'mssql';
|
||||
import * as vscodeMssql from 'vscode-mssql';
|
||||
|
||||
import { promises as fs } from 'fs';
|
||||
import { Uri, window } from 'vscode';
|
||||
@@ -20,7 +21,8 @@ import { DacpacReferenceProjectEntry, FileProjectEntry, NugetPackageReferencePro
|
||||
import { ResultStatus } from 'azdata';
|
||||
import { BaseProjectTreeItem } from './tree/baseTreeItem';
|
||||
import { NoneNode, PostDeployNode, PreDeployNode, PublishProfileNode, SqlObjectFileNode } from './tree/fileFolderTreeItem';
|
||||
import { GetFoldersResult, GetScriptsResult, ProjectType, SystemDatabase } from 'mssql';
|
||||
import { ProjectType, GetScriptsResult, GetFoldersResult } from '../common/typeHelper';
|
||||
|
||||
|
||||
/**
|
||||
* Represents the configuration based on the Configuration property in the sqlproj
|
||||
@@ -35,7 +37,7 @@ enum Configuration {
|
||||
* Class representing a Project, and providing functions for operating on it
|
||||
*/
|
||||
export class Project implements ISqlProject {
|
||||
private sqlProjService!: mssql.ISqlProjectsService;
|
||||
private sqlProjService!: utils.ISqlProjectsService;
|
||||
|
||||
private _projectFilePath: string;
|
||||
private _projectFileName: string;
|
||||
@@ -48,7 +50,7 @@ export class Project implements ISqlProject {
|
||||
private _preDeployScripts: FileProjectEntry[] = [];
|
||||
private _postDeployScripts: FileProjectEntry[] = [];
|
||||
private _noneDeployScripts: FileProjectEntry[] = [];
|
||||
private _sqlProjStyle: ProjectType = ProjectType.SdkStyle;
|
||||
private _sqlProjStyle: ProjectType;
|
||||
private _isCrossPlatformCompatible: boolean = false;
|
||||
private _outputPath: string = '';
|
||||
private _configuration: Configuration = Configuration.Debug;
|
||||
@@ -118,7 +120,11 @@ export class Project implements ISqlProject {
|
||||
}
|
||||
|
||||
public get sqlProjStyleName(): string {
|
||||
return this.sqlProjStyle === ProjectType.SdkStyle ? 'SdkStyle' : 'LegacyStyle';
|
||||
if (utils.getAzdataApi()) {
|
||||
return this.sqlProjStyle === mssql.ProjectType.SdkStyle ? 'SdkStyle' : 'LegacyStyle';
|
||||
} else {
|
||||
return this.sqlProjStyle === vscodeMssql.ProjectType.SdkStyle ? 'SdkStyle' : 'LegacyStyle';
|
||||
}
|
||||
}
|
||||
|
||||
public get isCrossPlatformCompatible(): boolean {
|
||||
@@ -142,6 +148,12 @@ export class Project implements ISqlProject {
|
||||
constructor(projectFilePath: string) {
|
||||
this._projectFilePath = projectFilePath;
|
||||
this._projectFileName = path.basename(projectFilePath, '.sqlproj');
|
||||
if (utils.getAzdataApi()) {
|
||||
this._sqlProjStyle = mssql.ProjectType.SdkStyle;
|
||||
} else {
|
||||
this._sqlProjStyle = vscodeMssql.ProjectType.SdkStyle
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -228,7 +240,14 @@ export class Project implements ISqlProject {
|
||||
//#region Reader helpers
|
||||
|
||||
private async readProjectProperties(): Promise<void> {
|
||||
const result = await this.sqlProjService.getProjectProperties(this.projectFilePath);
|
||||
let sqlProjService;
|
||||
if (utils.getAzdataApi()) {
|
||||
sqlProjService = this.sqlProjService as mssql.ISqlProjectsService;
|
||||
} else {
|
||||
sqlProjService = this.sqlProjService as vscodeMssql.ISqlProjectsService;
|
||||
}
|
||||
|
||||
const result = await sqlProjService.getProjectProperties(this.projectFilePath);
|
||||
this.throwIfFailed(result);
|
||||
|
||||
this._projectGuid = result.projectGuid;
|
||||
@@ -367,7 +386,14 @@ export class Project implements ISqlProject {
|
||||
}
|
||||
|
||||
private async readNoneItems(): Promise<void> {
|
||||
var result: GetScriptsResult = await this.sqlProjService.getNoneItems(this.projectFilePath);
|
||||
let sqlProjService;
|
||||
if (utils.getAzdataApi()) {
|
||||
sqlProjService = (await utils.getSqlProjectsService()) as mssql.ISqlProjectsService;
|
||||
} else {
|
||||
sqlProjService = (await utils.getSqlProjectsService()) as vscodeMssql.ISqlProjectsService;
|
||||
}
|
||||
|
||||
var result: GetScriptsResult = await sqlProjService.getNoneItems(this.projectFilePath);
|
||||
this.throwIfFailed(result);
|
||||
|
||||
const noneItemEntries: FileProjectEntry[] = [];
|
||||
@@ -423,8 +449,14 @@ export class Project implements ISqlProject {
|
||||
}
|
||||
|
||||
for (const systemDbReference of databaseReferencesResult.systemDatabaseReferences) {
|
||||
let systemDb;
|
||||
if (utils.getAzdataApi()) {
|
||||
systemDb = systemDbReference.systemDb === mssql.SystemDatabase.Master ? constants.master : constants.msdb;
|
||||
} else {
|
||||
systemDb = systemDbReference.systemDb === vscodeMssql.SystemDatabase.Master ? constants.master : constants.msdb;
|
||||
}
|
||||
this._databaseReferences.push(new SystemDatabaseReferenceProjectEntry(
|
||||
systemDbReference.systemDb === SystemDatabase.Master ? constants.master : constants.msdb,
|
||||
systemDb,
|
||||
systemDbReference.databaseVariableLiteralName,
|
||||
systemDbReference.suppressMissingDependencies));
|
||||
}
|
||||
@@ -769,8 +801,18 @@ export class Project implements ISqlProject {
|
||||
throw new Error(constants.databaseReferenceAlreadyExists);
|
||||
}
|
||||
|
||||
const systemDb = <unknown>settings.systemDb as SystemDatabase;
|
||||
const result = await this.sqlProjService.addSystemDatabaseReference(this.projectFilePath, systemDb, settings.suppressMissingDependenciesErrors, settings.databaseVariableLiteralValue);
|
||||
let systemDb;
|
||||
let result;
|
||||
let sqlProjService;
|
||||
if (utils.getAzdataApi()) {
|
||||
systemDb = <unknown>settings.systemDb as mssql.SystemDatabase;
|
||||
sqlProjService = this.sqlProjService as mssql.ISqlProjectsService;
|
||||
result = await sqlProjService.addSystemDatabaseReference(this.projectFilePath, systemDb, settings.suppressMissingDependenciesErrors, settings.databaseVariableLiteralValue);
|
||||
} else {
|
||||
systemDb = <unknown>settings.systemDb as vscodeMssql.SystemDatabase;
|
||||
sqlProjService = this.sqlProjService as vscodeMssql.ISqlProjectsService;
|
||||
result = await sqlProjService.addSystemDatabaseReference(this.projectFilePath, systemDb, settings.suppressMissingDependenciesErrors, settings.databaseVariableLiteralValue);
|
||||
}
|
||||
|
||||
if (!result.success && result.errorMessage) {
|
||||
throw new Error(constants.errorAddingDatabaseReference(utils.systemDatabaseToString(settings.systemDb), result.errorMessage));
|
||||
|
||||
@@ -9,6 +9,8 @@ import { BaseProjectTreeItem } from './baseTreeItem';
|
||||
import * as fileTree from './fileFolderTreeItem';
|
||||
import { Project } from '../project';
|
||||
import * as utils from '../../common/utils';
|
||||
import * as mssql from 'mssql';
|
||||
import * as vscodeMssql from 'vscode-mssql';
|
||||
import { DatabaseReferencesTreeItem } from './databaseReferencesTreeItem';
|
||||
import { DatabaseProjectItemType, RelativeOuterPath, ExternalStreamingJob, sqlprojExtension, CollapseProjectNodesKey, errorPrefix } from '../../common/constants';
|
||||
import { IconPathHelper } from '../../common/iconHelper';
|
||||
@@ -16,7 +18,6 @@ import { FileProjectEntry } from '../projectEntry';
|
||||
import { EntryType } from 'sqldbproj';
|
||||
import { DBProjectConfigurationKey } from '../../tools/netcoreTool';
|
||||
import { SqlCmdVariablesTreeItem } from './sqlcmdVariableTreeItem';
|
||||
import { ProjectType } from 'mssql';
|
||||
|
||||
/**
|
||||
* TreeNode root that represents an entire project
|
||||
@@ -60,7 +61,13 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
|
||||
}
|
||||
|
||||
public get type(): DatabaseProjectItemType {
|
||||
return this.project.sqlProjStyle === ProjectType.SdkStyle ? DatabaseProjectItemType.project : DatabaseProjectItemType.legacyProject;
|
||||
let projectType;
|
||||
if (utils.getAzdataApi()) {
|
||||
projectType = this.project.sqlProjStyle === mssql.ProjectType.SdkStyle ? DatabaseProjectItemType.project : DatabaseProjectItemType.legacyProject;
|
||||
} else {
|
||||
projectType = this.project.sqlProjStyle === vscodeMssql.ProjectType.SdkStyle ? DatabaseProjectItemType.project : DatabaseProjectItemType.legacyProject;
|
||||
}
|
||||
return projectType;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user