mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-16 09:35:36 -05:00
Add reference to another sql project (#12186)
* add projects to add database reference dialog * able to add project references * check for circular dependency * only allow adding reference to project in the same workspace * fix location dropdown when project reference is enabled * add tests * more tests * cleanup * fix flakey test * addressing comments
This commit is contained in:
@@ -28,7 +28,7 @@ import { NetCoreTool, DotNetCommandOptions } from '../tools/netcoreTool';
|
||||
import { BuildHelper } from '../tools/buildHelper';
|
||||
import { PublishProfile, load } from '../models/publishProfile/publishProfile';
|
||||
import { AddDatabaseReferenceDialog } from '../dialogs/addDatabaseReferenceDialog';
|
||||
import { ISystemDatabaseReferenceSettings, IDacpacReferenceSettings } from '../models/IDatabaseReferenceSettings';
|
||||
import { ISystemDatabaseReferenceSettings, IDacpacReferenceSettings, IProjectReferenceSettings } from '../models/IDatabaseReferenceSettings';
|
||||
|
||||
/**
|
||||
* Controller for managing project lifecycle
|
||||
@@ -76,7 +76,6 @@ export class ProjectsController {
|
||||
try {
|
||||
await this.openProject(projUri, false, true);
|
||||
} catch (e) {
|
||||
vscode.window.showErrorMessage(e.message === constants.projectAlreadyOpened(projUri.fsPath) ? constants.circularProjectReference(newProject.projectFileName, proj.databaseName) : e.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -486,9 +485,28 @@ export class ProjectsController {
|
||||
return addDatabaseReferenceDialog;
|
||||
}
|
||||
|
||||
public async addDatabaseReferenceCallback(project: Project, settings: ISystemDatabaseReferenceSettings | IDacpacReferenceSettings): Promise<void> {
|
||||
public async addDatabaseReferenceCallback(project: Project, settings: ISystemDatabaseReferenceSettings | IDacpacReferenceSettings | IProjectReferenceSettings): Promise<void> {
|
||||
try {
|
||||
if ((<ISystemDatabaseReferenceSettings>settings).systemDb !== undefined) {
|
||||
if ((<IProjectReferenceSettings>settings).projectName !== undefined) {
|
||||
// get project path and guid
|
||||
const projectReferenceSettings = settings as IProjectReferenceSettings;
|
||||
const referencedProject = this.projects.find(p => p.projectFileName === projectReferenceSettings.projectName);
|
||||
const relativePath = path.relative(project.projectFolderPath, referencedProject?.projectFilePath!);
|
||||
projectReferenceSettings.projectRelativePath = vscode.Uri.file(relativePath);
|
||||
projectReferenceSettings.projectGuid = referencedProject?.projectGuid!;
|
||||
|
||||
const projectReferences = referencedProject?.databaseReferences.filter(r => r instanceof SqlProjectReferenceProjectEntry) ?? [];
|
||||
|
||||
// check for cirular dependency
|
||||
for (let r of projectReferences) {
|
||||
if ((<SqlProjectReferenceProjectEntry>r).projectName === project.projectFileName) {
|
||||
vscode.window.showErrorMessage(constants.cantAddCircularProjectReference(referencedProject?.projectFileName!));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await project.addProjectReference(projectReferenceSettings);
|
||||
} else if ((<ISystemDatabaseReferenceSettings>settings).systemDb !== undefined) {
|
||||
await project.addSystemDatabaseReference(<ISystemDatabaseReferenceSettings>settings);
|
||||
} else {
|
||||
await project.addDatabaseReference(<IDacpacReferenceSettings>settings);
|
||||
|
||||
Reference in New Issue
Block a user