mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Make database references also work in SSDT (#10864)
* add system database reference for VS * a few fixes * update tests * update tests * fix tests after merge * addressing comment to make logic a little more clear * fix replacing SSDT reference name in tree
This commit is contained in:
@@ -132,6 +132,7 @@ export const NetCoreTargets = '$(NETCoreTargetsPath)\\Microsoft.Data.Tools.Schem
|
|||||||
export const SqlDbTargets = '$(SQLDBExtensionsRefPath)\\Microsoft.Data.Tools.Schema.SqlTasks.targets';
|
export const SqlDbTargets = '$(SQLDBExtensionsRefPath)\\Microsoft.Data.Tools.Schema.SqlTasks.targets';
|
||||||
export const MsBuildtargets = '$(MSBuildExtensionsPath)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\SSDT\\Microsoft.Data.Tools.Schema.SqlTasks.targets';
|
export const MsBuildtargets = '$(MSBuildExtensionsPath)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\SSDT\\Microsoft.Data.Tools.Schema.SqlTasks.targets';
|
||||||
export const NetCoreCondition = '\'$(NetCoreBuild)\' == \'true\'';
|
export const NetCoreCondition = '\'$(NetCoreBuild)\' == \'true\'';
|
||||||
|
export const NotNetCoreCondition = '\'$(NetCoreBuild)\' != \'true\'';
|
||||||
export const SqlDbPresentCondition = '\'$(SQLDBExtensionsRefPath)\' != \'\'';
|
export const SqlDbPresentCondition = '\'$(SQLDBExtensionsRefPath)\' != \'\'';
|
||||||
export const SqlDbNotPresentCondition = '\'$(SQLDBExtensionsRefPath)\' == \'\'';
|
export const SqlDbNotPresentCondition = '\'$(SQLDBExtensionsRefPath)\' == \'\'';
|
||||||
export const RoundTripSqlDbPresentCondition = '\'$(NetCoreBuild)\' != \'true\' AND \'$(SQLDBExtensionsRefPath)\' != \'\'';
|
export const RoundTripSqlDbPresentCondition = '\'$(NetCoreBuild)\' != \'true\' AND \'$(SQLDBExtensionsRefPath)\' != \'\'';
|
||||||
|
|||||||
@@ -316,9 +316,9 @@ export class ProjectsController {
|
|||||||
|
|
||||||
if (databaseLocation === DatabaseReferenceLocation.differentDatabaseSameServer) {
|
if (databaseLocation === DatabaseReferenceLocation.differentDatabaseSameServer) {
|
||||||
const databaseName = await this.getDatabaseName(dacpacFileLocation);
|
const databaseName = await this.getDatabaseName(dacpacFileLocation);
|
||||||
await project.addDatabaseReference(dacpacFileLocation, <DatabaseReferenceLocation>databaseLocation, false, databaseName);
|
await project.addDatabaseReference(dacpacFileLocation, databaseLocation, databaseName);
|
||||||
} else {
|
} else {
|
||||||
await project.addDatabaseReference(dacpacFileLocation, <DatabaseReferenceLocation>databaseLocation, false);
|
await project.addDatabaseReference(dacpacFileLocation, databaseLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,12 +74,14 @@ export class Project {
|
|||||||
|
|
||||||
// find all database references to include
|
// find all database references to include
|
||||||
for (let r = 0; r < this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference).length; r++) {
|
for (let r = 0; r < this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference).length; r++) {
|
||||||
const filepath = this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference)[r].getAttribute(constants.Include);
|
if (this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference)[r].getAttribute(constants.Condition) !== constants.NotNetCoreCondition) {
|
||||||
if (!filepath) {
|
const filepath = this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference)[r].getAttribute(constants.Include);
|
||||||
throw new Error(constants.invalidDatabaseReference);
|
if (!filepath) {
|
||||||
}
|
throw new Error(constants.invalidDatabaseReference);
|
||||||
|
}
|
||||||
|
|
||||||
this.databaseReferences.push(path.parse(filepath).name);
|
this.databaseReferences.push(path.parse(filepath).name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,16 +197,20 @@ export class Project {
|
|||||||
*/
|
*/
|
||||||
public async addSystemDatabaseReference(name: SystemDatabase): Promise<void> {
|
public async addSystemDatabaseReference(name: SystemDatabase): Promise<void> {
|
||||||
let uri: Uri;
|
let uri: Uri;
|
||||||
|
let ssdtUri: Uri;
|
||||||
let dbName: string;
|
let dbName: string;
|
||||||
if (name === SystemDatabase.master) {
|
if (name === SystemDatabase.master) {
|
||||||
uri = this.getSystemDacpacUri(constants.masterDacpac);
|
uri = this.getSystemDacpacUri(constants.masterDacpac);
|
||||||
|
ssdtUri = this.getSystemDacpacSsdtUri(constants.masterDacpac);
|
||||||
dbName = constants.master;
|
dbName = constants.master;
|
||||||
} else {
|
} else {
|
||||||
uri = this.getSystemDacpacUri(constants.msdbDacpac);
|
uri = this.getSystemDacpacUri(constants.msdbDacpac);
|
||||||
|
ssdtUri = this.getSystemDacpacSsdtUri(constants.msdbDacpac);
|
||||||
dbName = constants.msdb;
|
dbName = constants.msdb;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.addDatabaseReference(uri, DatabaseReferenceLocation.differentDatabaseSameServer, true, dbName);
|
let systemDatabaseReferenceProjectEntry = new SystemDatabaseReferenceProjectEntry(uri, ssdtUri, dbName);
|
||||||
|
await this.addToProjFile(systemDatabaseReferenceProjectEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getSystemDacpacUri(dacpac: string): Uri {
|
public getSystemDacpacUri(dacpac: string): Uri {
|
||||||
@@ -212,6 +218,11 @@ export class Project {
|
|||||||
return Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', version, dacpac));
|
return Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', version, dacpac));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getSystemDacpacSsdtUri(dacpac: string): Uri {
|
||||||
|
let version = this.getProjectTargetPlatform();
|
||||||
|
return Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', version, 'SqlSchemas', dacpac));
|
||||||
|
}
|
||||||
|
|
||||||
public getProjectTargetPlatform(): string {
|
public getProjectTargetPlatform(): string {
|
||||||
// check for invalid DSP
|
// check for invalid DSP
|
||||||
if (this.projFileXmlDoc.getElementsByTagName(constants.DSP).length !== 1 || this.projFileXmlDoc.getElementsByTagName(constants.DSP)[0].childNodes.length !== 1) {
|
if (this.projFileXmlDoc.getElementsByTagName(constants.DSP).length !== 1 || this.projFileXmlDoc.getElementsByTagName(constants.DSP)[0].childNodes.length !== 1) {
|
||||||
@@ -239,8 +250,8 @@ export class Project {
|
|||||||
* @param uri Uri of the dacpac
|
* @param uri Uri of the dacpac
|
||||||
* @param databaseName name of the database
|
* @param databaseName name of the database
|
||||||
*/
|
*/
|
||||||
public async addDatabaseReference(uri: Uri, databaseLocation: DatabaseReferenceLocation, isSystemDatabase: boolean, databaseName?: string): Promise<void> {
|
public async addDatabaseReference(uri: Uri, databaseLocation: DatabaseReferenceLocation, databaseName?: string): Promise<void> {
|
||||||
let databaseReferenceEntry = new DatabaseReferenceProjectEntry(uri, databaseLocation, isSystemDatabase, databaseName);
|
let databaseReferenceEntry = new DatabaseReferenceProjectEntry(uri, databaseLocation, databaseName);
|
||||||
await this.addToProjFile(databaseReferenceEntry);
|
await this.addToProjFile(databaseReferenceEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,24 +300,41 @@ export class Project {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private addDatabaseReferenceToProjFile(entry: DatabaseReferenceProjectEntry): void {
|
private addDatabaseReferenceToProjFile(entry: DatabaseReferenceProjectEntry): void {
|
||||||
const referenceNode = this.projFileXmlDoc.createElement(constants.ArtifactReference);
|
let referenceNode = this.projFileXmlDoc.createElement(constants.ArtifactReference);
|
||||||
referenceNode.setAttribute(constants.Condition, constants.NetCoreCondition);
|
const isSystemDatabaseProjectEntry = (<SystemDatabaseReferenceProjectEntry>entry).ssdtUri;
|
||||||
referenceNode.setAttribute(constants.Include, entry.isSystemDatabase ? entry.fsUri.fsPath.substring(1) : entry.fsUri.fsPath); // need to remove the leading slash for system database path for build to work on Windows
|
|
||||||
|
|
||||||
|
// if it's a system database reference, we'll add an additional node with the SSDT location of the dacpac later
|
||||||
|
if (isSystemDatabaseProjectEntry) {
|
||||||
|
referenceNode.setAttribute(constants.Condition, constants.NetCoreCondition);
|
||||||
|
}
|
||||||
|
|
||||||
|
referenceNode.setAttribute(constants.Include, isSystemDatabaseProjectEntry ? entry.fsUri.fsPath.substring(1) : entry.fsUri.fsPath); // need to remove the leading slash for system database path for build to work on Windows
|
||||||
|
this.addDatabaseReferenceChildren(referenceNode, entry.name);
|
||||||
|
this.findOrCreateItemGroup(constants.ArtifactReference).appendChild(referenceNode);
|
||||||
|
this.databaseReferences.push(path.parse(entry.fsUri.fsPath.toString()).name);
|
||||||
|
|
||||||
|
// add a reference to the system dacpac in SSDT if it's a system db
|
||||||
|
if (isSystemDatabaseProjectEntry) {
|
||||||
|
let ssdtReferenceNode = this.projFileXmlDoc.createElement(constants.ArtifactReference);
|
||||||
|
ssdtReferenceNode.setAttribute(constants.Condition, constants.NotNetCoreCondition);
|
||||||
|
ssdtReferenceNode.setAttribute(constants.Include, (<SystemDatabaseReferenceProjectEntry>entry).ssdtUri.fsPath.substring(1)); // need to remove the leading slash for system database path for build to work on Windows
|
||||||
|
this.addDatabaseReferenceChildren(ssdtReferenceNode, entry.name);
|
||||||
|
this.findOrCreateItemGroup(constants.ArtifactReference).appendChild(ssdtReferenceNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private addDatabaseReferenceChildren(referenceNode: any, name?: string): void {
|
||||||
let suppressMissingDependenciesErrorNode = this.projFileXmlDoc.createElement(constants.SuppressMissingDependenciesErrors);
|
let suppressMissingDependenciesErrorNode = this.projFileXmlDoc.createElement(constants.SuppressMissingDependenciesErrors);
|
||||||
let falseTextNode = this.projFileXmlDoc.createTextNode('False');
|
let falseTextNode = this.projFileXmlDoc.createTextNode('False');
|
||||||
suppressMissingDependenciesErrorNode.appendChild(falseTextNode);
|
suppressMissingDependenciesErrorNode.appendChild(falseTextNode);
|
||||||
referenceNode.appendChild(suppressMissingDependenciesErrorNode);
|
referenceNode.appendChild(suppressMissingDependenciesErrorNode);
|
||||||
|
|
||||||
if (entry.databaseLocation === DatabaseReferenceLocation.differentDatabaseSameServer) {
|
if (name) {
|
||||||
let databaseVariableLiteralValue = this.projFileXmlDoc.createElement(constants.DatabaseVariableLiteralValue);
|
let databaseVariableLiteralValue = this.projFileXmlDoc.createElement(constants.DatabaseVariableLiteralValue);
|
||||||
let databaseTextNode = this.projFileXmlDoc.createTextNode(entry.name);
|
let databaseTextNode = this.projFileXmlDoc.createTextNode(name);
|
||||||
databaseVariableLiteralValue.appendChild(databaseTextNode);
|
databaseVariableLiteralValue.appendChild(databaseTextNode);
|
||||||
referenceNode.appendChild(databaseVariableLiteralValue);
|
referenceNode.appendChild(databaseVariableLiteralValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.findOrCreateItemGroup(constants.ArtifactReference).appendChild(referenceNode);
|
|
||||||
this.databaseReferences.push(path.parse(entry.fsUri.fsPath.toString()).name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async updateImportedTargetsToProjFile(condition: string, projectAttributeVal: string, oldImportNode?: any): Promise<any> {
|
private async updateImportedTargetsToProjFile(condition: string, projectAttributeVal: string, oldImportNode?: any): Promise<any> {
|
||||||
@@ -341,7 +369,8 @@ export class Project {
|
|||||||
public containsSSDTOnlySystemDatabaseReferences(): boolean {
|
public containsSSDTOnlySystemDatabaseReferences(): boolean {
|
||||||
for (let r = 0; r < this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference).length; r++) {
|
for (let r = 0; r < this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference).length; r++) {
|
||||||
const currentNode = this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference)[r];
|
const currentNode = this.projFileXmlDoc.documentElement.getElementsByTagName(constants.ArtifactReference)[r];
|
||||||
if (!currentNode.getAttribute(constants.NetCoreCondition) && currentNode.getAttribute(constants.Include).includes(constants.DacpacRootPath)) {
|
if (currentNode.getAttribute(constants.Condition) !== constants.NetCoreCondition && currentNode.getAttribute(constants.Condition) !== constants.NotNetCoreCondition
|
||||||
|
&& currentNode.getAttribute(constants.Include).includes(constants.DacpacRootPath)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -364,7 +393,7 @@ export class Project {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// remove from database references because it'll get added again later
|
// remove from database references because it'll get added again later
|
||||||
this.databaseReferences.splice(this.databaseReferences.findIndex(n => n === (name ? constants.master : constants.msdb)), 1);
|
this.databaseReferences.splice(this.databaseReferences.findIndex(n => n === (name === SystemDatabase.master ? constants.master : constants.msdb)), 1);
|
||||||
|
|
||||||
await this.addSystemDatabaseReference(name);
|
await this.addSystemDatabaseReference(name);
|
||||||
}
|
}
|
||||||
@@ -444,11 +473,17 @@ export class ProjectEntry {
|
|||||||
* Represents a database reference entry in a project file
|
* Represents a database reference entry in a project file
|
||||||
*/
|
*/
|
||||||
class DatabaseReferenceProjectEntry extends ProjectEntry {
|
class DatabaseReferenceProjectEntry extends ProjectEntry {
|
||||||
constructor(uri: Uri, public databaseLocation: DatabaseReferenceLocation, public isSystemDatabase: boolean, public name?: string) {
|
constructor(uri: Uri, public databaseLocation: DatabaseReferenceLocation, public name?: string) {
|
||||||
super(uri, '', EntryType.DatabaseReference);
|
super(uri, '', EntryType.DatabaseReference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SystemDatabaseReferenceProjectEntry extends DatabaseReferenceProjectEntry {
|
||||||
|
constructor(uri: Uri, public ssdtUri: Uri, public name: string) {
|
||||||
|
super(uri, DatabaseReferenceLocation.differentDatabaseSameServer, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export enum EntryType {
|
export enum EntryType {
|
||||||
File,
|
File,
|
||||||
Folder,
|
Folder,
|
||||||
|
|||||||
@@ -81,5 +81,9 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)/Extensions/Microsoft/SQLDB/Extensions/SqlServer/130/SqlSchemas/master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -81,5 +81,9 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -81,9 +81,17 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)/Extensions/Microsoft/SQLDB/Extensions/SqlServer/130/SqlSchemas/master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
<ArtifactReference Condition="'$(NetCoreBuild)' == 'true'" Include="$(NETCoreTargetsPath)/SystemDacpacs/130/msdb.dacpac">
|
<ArtifactReference Condition="'$(NetCoreBuild)' == 'true'" Include="$(NETCoreTargetsPath)/SystemDacpacs/130/msdb.dacpac">
|
||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)/Extensions/Microsoft/SQLDB/Extensions/SqlServer/130/SqlSchemas/msdb.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -81,9 +81,17 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
<ArtifactReference Condition="'$(NetCoreBuild)' == 'true'" Include="$(NETCoreTargetsPath)\SystemDacpacs\130\msdb.dacpac">
|
<ArtifactReference Condition="'$(NetCoreBuild)' == 'true'" Include="$(NETCoreTargetsPath)\SystemDacpacs\130\msdb.dacpac">
|
||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -81,6 +81,10 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)/Extensions/Microsoft/SQLDB/Extensions/SqlServer/130/SqlSchemas/master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac">
|
<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac">
|
||||||
<HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac</HintPath>
|
<HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac</HintPath>
|
||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
|||||||
@@ -86,5 +86,9 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -88,6 +88,10 @@
|
|||||||
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
</ArtifactReference>
|
</ArtifactReference>
|
||||||
|
<ArtifactReference Condition="'$(NetCoreBuild)' != 'true'" Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
|
||||||
|
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
|
||||||
|
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
|
||||||
|
</ArtifactReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Target Name="AfterClean">
|
<Target Name="AfterClean">
|
||||||
<Delete Files="$(BaseIntermediateOutputPath)\project.assets.json" />
|
<Delete Files="$(BaseIntermediateOutputPath)\project.assets.json" />
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ describe('Project: sqlproj content operations', function (): void {
|
|||||||
should(project.sqlCmdVariables['BackupDatabaseName']).equal('MyBackupDatabase');
|
should(project.sqlCmdVariables['BackupDatabaseName']).equal('MyBackupDatabase');
|
||||||
|
|
||||||
// Database references
|
// Database references
|
||||||
|
// should only have one database reference even though there are two master.dacpac references (1 for ADS and 1 for SSDT)
|
||||||
should(project.databaseReferences.length).equal(1);
|
should(project.databaseReferences.length).equal(1);
|
||||||
should(project.databaseReferences[0]).containEql(constants.master);
|
should(project.databaseReferences[0]).containEql(constants.master);
|
||||||
});
|
});
|
||||||
@@ -103,15 +104,21 @@ describe('Project: sqlproj content operations', function (): void {
|
|||||||
await project.readProjFile();
|
await project.readProjFile();
|
||||||
|
|
||||||
let uri = project.getSystemDacpacUri(constants.masterDacpac);
|
let uri = project.getSystemDacpacUri(constants.masterDacpac);
|
||||||
|
let ssdtUri = project.getSystemDacpacSsdtUri(constants.masterDacpac);
|
||||||
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '130', constants.masterDacpac)).fsPath);
|
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '130', constants.masterDacpac)).fsPath);
|
||||||
|
should.equal(ssdtUri.fsPath, Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', '130', 'SqlSchemas', constants.masterDacpac)).fsPath);
|
||||||
|
|
||||||
project.changeDSP(TargetPlatform.Sql150.toString());
|
project.changeDSP(TargetPlatform.Sql150.toString());
|
||||||
uri = project.getSystemDacpacUri(constants.masterDacpac);
|
uri = project.getSystemDacpacUri(constants.masterDacpac);
|
||||||
|
ssdtUri = project.getSystemDacpacSsdtUri(constants.masterDacpac);
|
||||||
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '150', constants.masterDacpac)).fsPath);
|
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '150', constants.masterDacpac)).fsPath);
|
||||||
|
should.equal(ssdtUri.fsPath, Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', '150', 'SqlSchemas', constants.masterDacpac)).fsPath);
|
||||||
|
|
||||||
project.changeDSP(TargetPlatform.SqlAzureV12.toString());
|
project.changeDSP(TargetPlatform.SqlAzureV12.toString());
|
||||||
uri = project.getSystemDacpacUri(constants.masterDacpac);
|
uri = project.getSystemDacpacUri(constants.masterDacpac);
|
||||||
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', 'AzureV12', constants.masterDacpac)).fsPath);
|
ssdtUri = project.getSystemDacpacSsdtUri(constants.masterDacpac);
|
||||||
|
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', 'AzureV12',constants.masterDacpac)).fsPath);
|
||||||
|
should.equal(ssdtUri.fsPath, Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', 'AzureV12', 'SqlSchemas', constants.masterDacpac)).fsPath);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should choose correct msdb dacpac', async function (): Promise<void> {
|
it('Should choose correct msdb dacpac', async function (): Promise<void> {
|
||||||
@@ -120,15 +127,21 @@ describe('Project: sqlproj content operations', function (): void {
|
|||||||
await project.readProjFile();
|
await project.readProjFile();
|
||||||
|
|
||||||
let uri = project.getSystemDacpacUri(constants.msdbDacpac);
|
let uri = project.getSystemDacpacUri(constants.msdbDacpac);
|
||||||
|
let ssdtUri = project.getSystemDacpacSsdtUri(constants.msdbDacpac);
|
||||||
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '130', constants.msdbDacpac)).fsPath);
|
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '130', constants.msdbDacpac)).fsPath);
|
||||||
|
should.equal(ssdtUri.fsPath, Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', '130', 'SqlSchemas', constants.msdbDacpac)).fsPath);
|
||||||
|
|
||||||
project.changeDSP(TargetPlatform.Sql150.toString());
|
project.changeDSP(TargetPlatform.Sql150.toString());
|
||||||
uri = project.getSystemDacpacUri(constants.msdbDacpac);
|
uri = project.getSystemDacpacUri(constants.msdbDacpac);
|
||||||
|
ssdtUri = project.getSystemDacpacSsdtUri(constants.msdbDacpac);
|
||||||
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '150', constants.msdbDacpac)).fsPath);
|
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', '150', constants.msdbDacpac)).fsPath);
|
||||||
|
should.equal(ssdtUri.fsPath, Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', '150', 'SqlSchemas', constants.msdbDacpac)).fsPath);
|
||||||
|
|
||||||
project.changeDSP(TargetPlatform.SqlAzureV12.toString());
|
project.changeDSP(TargetPlatform.SqlAzureV12.toString());
|
||||||
uri = project.getSystemDacpacUri(constants.msdbDacpac);
|
uri = project.getSystemDacpacUri(constants.msdbDacpac);
|
||||||
|
ssdtUri = project.getSystemDacpacSsdtUri(constants.msdbDacpac);
|
||||||
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', 'AzureV12', constants.msdbDacpac)).fsPath);
|
should.equal(uri.fsPath, Uri.parse(path.join('$(NETCoreTargetsPath)', 'SystemDacpacs', 'AzureV12', constants.msdbDacpac)).fsPath);
|
||||||
|
should.equal(ssdtUri.fsPath, Uri.parse(path.join('$(DacPacRootPath)', 'Extensions', 'Microsoft', 'SQLDB', 'Extensions', 'SqlServer', 'AzureV12', 'SqlSchemas', constants.msdbDacpac)).fsPath);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should throw error when choosing correct master dacpac if invalid DSP', async function (): Promise<void> {
|
it('Should throw error when choosing correct master dacpac if invalid DSP', async function (): Promise<void> {
|
||||||
@@ -149,12 +162,18 @@ describe('Project: sqlproj content operations', function (): void {
|
|||||||
await project.addSystemDatabaseReference(SystemDatabase.master);
|
await project.addSystemDatabaseReference(SystemDatabase.master);
|
||||||
should(project.databaseReferences.length).equal(1);
|
should(project.databaseReferences.length).equal(1);
|
||||||
should(project.databaseReferences[0]).equal(constants.master);
|
should(project.databaseReferences[0]).equal(constants.master);
|
||||||
|
// make sure reference to SSDT master dacpac was added
|
||||||
|
let projFileText = (await fs.readFile(projFilePath)).toString();
|
||||||
|
should(projFileText).containEql(project.getSystemDacpacSsdtUri(constants.master).fsPath.substring(1));
|
||||||
|
|
||||||
await project.addSystemDatabaseReference(SystemDatabase.msdb);
|
await project.addSystemDatabaseReference(SystemDatabase.msdb);
|
||||||
should(project.databaseReferences.length).equal(2);
|
should(project.databaseReferences.length).equal(2);
|
||||||
should(project.databaseReferences[1]).equal(constants.msdb);
|
should(project.databaseReferences[1]).equal(constants.msdb);
|
||||||
|
// make sure reference to SSDT msdb dacpac was added
|
||||||
|
projFileText = (await fs.readFile(projFilePath)).toString();
|
||||||
|
should(projFileText).containEql(project.getSystemDacpacSsdtUri(constants.msdb).fsPath.substring(1));
|
||||||
|
|
||||||
await project.addDatabaseReference(Uri.parse('test.dacpac'), DatabaseReferenceLocation.sameDatabase, false);
|
await project.addDatabaseReference(Uri.parse('test.dacpac'), DatabaseReferenceLocation.sameDatabase);
|
||||||
should(project.databaseReferences.length).equal(3);
|
should(project.databaseReferences.length).equal(3);
|
||||||
should(project.databaseReferences[2]).equal('test');
|
should(project.databaseReferences[2]).equal('test');
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user