Add db and server sqlcmd variables for database references (#12089)

* add support for adding db and server sqlcmd variables

* fix incrementing

* split up test
This commit is contained in:
Kim Santiago
2020-09-03 10:27:02 -07:00
committed by GitHub
parent d97993e518
commit f29127d515
4 changed files with 91 additions and 12 deletions

View File

@@ -498,7 +498,6 @@ export class Project {
if (isSystemDatabaseProjectEntry) {
this.addSystemDatabaseReferenceToProjFile(<SystemDatabaseReferenceProjectEntry>entry);
} else {
const referenceNode = this.projFileXmlDoc.createElement(constants.ArtifactReference);
referenceNode.setAttribute(constants.Include, entry.pathForSqlProj());
this.addDatabaseReferenceChildren(referenceNode, entry);
@@ -519,13 +518,30 @@ export class Project {
suppressMissingDependenciesErrorNode.appendChild(falseTextNode);
referenceNode.appendChild(suppressMissingDependenciesErrorNode);
// TODO: add support for sqlcmd vars and server https://github.com/microsoft/azuredatastudio/issues/12036
if (entry.databaseVariableLiteralValue) {
if ((<DacpacReferenceProjectEntry>entry).databaseSqlCmdVariable) {
const databaseSqlCmdVariableElement = this.projFileXmlDoc.createElement(constants.DatabaseSqlCmdVariable);
const databaseSqlCmdVariableTextNode = this.projFileXmlDoc.createTextNode((<DacpacReferenceProjectEntry>entry).databaseSqlCmdVariable);
databaseSqlCmdVariableElement.appendChild(databaseSqlCmdVariableTextNode);
referenceNode.appendChild(databaseSqlCmdVariableElement);
// add SQLCMD variable
this.addSqlCmdVariable((<DacpacReferenceProjectEntry>entry).databaseSqlCmdVariable!, (<DacpacReferenceProjectEntry>entry).databaseName);
} else if (entry.databaseVariableLiteralValue) {
const databaseVariableLiteralValueElement = this.projFileXmlDoc.createElement(constants.DatabaseVariableLiteralValue);
const databaseTextNode = this.projFileXmlDoc.createTextNode(entry.databaseVariableLiteralValue);
databaseVariableLiteralValueElement.appendChild(databaseTextNode);
referenceNode.appendChild(databaseVariableLiteralValueElement);
}
if ((<DacpacReferenceProjectEntry>entry).serverSqlCmdVariable) {
const serverSqlCmdVariableElement = this.projFileXmlDoc.createElement(constants.ServerSqlCmdVariable);
const serverSqlCmdVariableTextNode = this.projFileXmlDoc.createTextNode((<DacpacReferenceProjectEntry>entry).serverSqlCmdVariable);
serverSqlCmdVariableElement.appendChild(serverSqlCmdVariableTextNode);
referenceNode.appendChild(serverSqlCmdVariableElement);
// add SQLCMD variable
this.addSqlCmdVariable((<DacpacReferenceProjectEntry>entry).serverSqlCmdVariable!, (<DacpacReferenceProjectEntry>entry).serverName!);
}
}
public addSqlCmdVariableToProjFile(entry: SqlCmdVariableProjectEntry): void {
@@ -561,7 +577,7 @@ export class Project {
*/
private getNextSqlCmdVariableCounter(): number {
const sqlCmdVariableNodes = this.projFileXmlDoc.documentElement.getElementsByTagName(constants.SqlCmdVariable);
let highestNumber = 1;
let highestNumber = 0;
for (let i = 0; i < sqlCmdVariableNodes.length; i++) {
const value: string = sqlCmdVariableNodes[i].getElementsByTagName(constants.Value)[0].childNodes[0].nodeValue;
@@ -767,11 +783,17 @@ export interface IDatabaseReferenceProjectEntry extends FileProjectEntry {
export class DacpacReferenceProjectEntry extends FileProjectEntry implements IDatabaseReferenceProjectEntry {
databaseLocation: DatabaseReferenceLocation;
databaseVariableLiteralValue?: string;
databaseSqlCmdVariable?: string;
serverName?: string;
serverSqlCmdVariable?: string;
constructor(settings: IDacpacReferenceSettings) {
super(settings.dacpacFileLocation, '', EntryType.DatabaseReference);
this.databaseLocation = settings.databaseLocation;
this.databaseSqlCmdVariable = settings.databaseVariable;
this.databaseVariableLiteralValue = settings.databaseName;
this.serverName = settings.serverName;
this.serverSqlCmdVariable = settings.serverVariable;
}
/**