mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Add projects support for Fabric DW (#24014)
* Update STS and add new platform * Update vsix version * Create Fabric DW project from database * Fix target platform name * Address comments * Revert projects version to 1.3.0 * Update STS to 4.9.0.22 * PR comment
This commit is contained in:
@@ -620,6 +620,7 @@ export function differentDbDifferentServerExampleUsage(server: string, db: strin
|
|||||||
|
|
||||||
//#region Target platforms
|
//#region Target platforms
|
||||||
export const targetPlatformToVersion: Map<string, string> = new Map<string, string>([
|
export const targetPlatformToVersion: Map<string, string> = new Map<string, string>([
|
||||||
|
// Note: the values here must match values from Microsoft.Data.Tools.Schema.SchemaModel.SqlPlatformNames
|
||||||
[SqlTargetPlatform.sqlServer2012, '110'],
|
[SqlTargetPlatform.sqlServer2012, '110'],
|
||||||
[SqlTargetPlatform.sqlServer2014, '120'],
|
[SqlTargetPlatform.sqlServer2014, '120'],
|
||||||
[SqlTargetPlatform.sqlServer2016, '130'],
|
[SqlTargetPlatform.sqlServer2016, '130'],
|
||||||
@@ -627,7 +628,8 @@ export const targetPlatformToVersion: Map<string, string> = new Map<string, stri
|
|||||||
[SqlTargetPlatform.sqlServer2019, '150'],
|
[SqlTargetPlatform.sqlServer2019, '150'],
|
||||||
[SqlTargetPlatform.sqlServer2022, '160'],
|
[SqlTargetPlatform.sqlServer2022, '160'],
|
||||||
[SqlTargetPlatform.sqlAzure, 'AzureV12'],
|
[SqlTargetPlatform.sqlAzure, 'AzureV12'],
|
||||||
[SqlTargetPlatform.sqlDW, 'Dw']
|
[SqlTargetPlatform.sqlDW, 'Dw'],
|
||||||
|
[SqlTargetPlatform.sqlDwUnified, 'DwUnified']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export const onPremServerVersionToTargetPlatform: Map<number, SqlTargetPlatform> = new Map<number, SqlTargetPlatform>([
|
export const onPremServerVersionToTargetPlatform: Map<number, SqlTargetPlatform> = new Map<number, SqlTargetPlatform>([
|
||||||
|
|||||||
@@ -718,9 +718,10 @@ export async function fileContainsCreateTableStatement(fullPath: string, project
|
|||||||
/**
|
/**
|
||||||
* Gets target platform based on the server edition/version
|
* Gets target platform based on the server edition/version
|
||||||
* @param serverInfo server information
|
* @param serverInfo server information
|
||||||
|
* @param serverUrl optional server URL, only used to check if it's a known domain for Microsoft Fabric DW
|
||||||
* @returns target platform for the database project
|
* @returns target platform for the database project
|
||||||
*/
|
*/
|
||||||
export async function getTargetPlatformFromServerVersion(serverInfo: azdataType.ServerInfo | vscodeMssql.IServerInfo): Promise<SqlTargetPlatform | undefined> {
|
export async function getTargetPlatformFromServerVersion(serverInfo: azdataType.ServerInfo | vscodeMssql.IServerInfo, serverUrl?: string): Promise<SqlTargetPlatform | undefined> {
|
||||||
const isCloud = serverInfo.isCloud;
|
const isCloud = serverInfo.isCloud;
|
||||||
|
|
||||||
let targetPlatform;
|
let targetPlatform;
|
||||||
@@ -728,9 +729,25 @@ export async function getTargetPlatformFromServerVersion(serverInfo: azdataType.
|
|||||||
const engineEdition = serverInfo.engineEditionId;
|
const engineEdition = serverInfo.engineEditionId;
|
||||||
const azdataApi = getAzdataApi();
|
const azdataApi = getAzdataApi();
|
||||||
if (azdataApi) {
|
if (azdataApi) {
|
||||||
targetPlatform = engineEdition === azdataApi.DatabaseEngineEdition.SqlDataWarehouse ? SqlTargetPlatform.sqlDW : SqlTargetPlatform.sqlAzure;
|
// TODO: Update this when Fabric DW gets its own engine edition
|
||||||
|
// https://github.com/microsoft/azuredatastudio/issues/24112
|
||||||
|
if (engineEdition === azdataApi.DatabaseEngineEdition.SqlOnDemand && isSqlDwUnifiedServer(serverUrl)) {
|
||||||
|
targetPlatform = SqlTargetPlatform.sqlDwUnified;
|
||||||
|
} else if (engineEdition === azdataApi.DatabaseEngineEdition.SqlDataWarehouse) {
|
||||||
|
targetPlatform = SqlTargetPlatform.sqlDW;
|
||||||
|
} else {
|
||||||
|
targetPlatform = SqlTargetPlatform.sqlAzure;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
targetPlatform = engineEdition === vscodeMssql.DatabaseEngineEdition.SqlDataWarehouse ? SqlTargetPlatform.sqlDW : SqlTargetPlatform.sqlAzure;
|
// TODO: Update this when Fabric DW gets its own engine edition
|
||||||
|
// https://github.com/microsoft/azuredatastudio/issues/24112
|
||||||
|
if (engineEdition === vscodeMssql.DatabaseEngineEdition.SqlOnDemand && isSqlDwUnifiedServer(serverUrl)) {
|
||||||
|
targetPlatform = SqlTargetPlatform.sqlDwUnified;
|
||||||
|
} else if (engineEdition === vscodeMssql.DatabaseEngineEdition.SqlDataWarehouse) {
|
||||||
|
targetPlatform = SqlTargetPlatform.sqlDW;
|
||||||
|
} else {
|
||||||
|
targetPlatform = SqlTargetPlatform.sqlAzure;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const serverMajorVersion = serverInfo.serverMajorVersion;
|
const serverMajorVersion = serverInfo.serverMajorVersion;
|
||||||
@@ -740,6 +757,16 @@ export async function getTargetPlatformFromServerVersion(serverInfo: azdataType.
|
|||||||
return targetPlatform;
|
return targetPlatform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if a server name is a known domain for Microsoft Fabric DW. This is required because the engine edition for Fabric DW is the same as Serverless.
|
||||||
|
* @param server The server name to check
|
||||||
|
* @returns True if the server name matches a known domain for Microsoft Fabric DW, otherwise false
|
||||||
|
*/
|
||||||
|
export function isSqlDwUnifiedServer(server?: string): boolean | undefined {
|
||||||
|
const serverLowerCase = server?.toLowerCase();
|
||||||
|
return serverLowerCase?.includes("datawarehouse.pbidedicated.windows.net") || serverLowerCase?.includes("datawarehouse.fabric.microsoft.com");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if a given character is a valid filename character
|
* Determines if a given character is a valid filename character
|
||||||
* @param c Character to validate
|
* @param c Character to validate
|
||||||
|
|||||||
@@ -1559,7 +1559,7 @@ export class ProjectsController {
|
|||||||
if (utils.getAzdataApi()) {
|
if (utils.getAzdataApi()) {
|
||||||
let createProjectFromDatabaseDialog = this.getCreateProjectFromDatabaseDialog(profile as azdataType.IConnectionProfile);
|
let createProjectFromDatabaseDialog = this.getCreateProjectFromDatabaseDialog(profile as azdataType.IConnectionProfile);
|
||||||
|
|
||||||
createProjectFromDatabaseDialog.createProjectFromDatabaseCallback = async (model, connectionId) => await this.createProjectFromDatabaseCallback(model, connectionId);
|
createProjectFromDatabaseDialog.createProjectFromDatabaseCallback = async (model, connectionId) => await this.createProjectFromDatabaseCallback(model, connectionId, (profile as azdataType.IConnectionProfile)?.serverName);
|
||||||
|
|
||||||
await createProjectFromDatabaseDialog.openDialog();
|
await createProjectFromDatabaseDialog.openDialog();
|
||||||
|
|
||||||
@@ -1575,7 +1575,7 @@ export class ProjectsController {
|
|||||||
}
|
}
|
||||||
const model = await createNewProjectFromDatabaseWithQuickpick(profile as mssqlVscode.IConnectionInfo);
|
const model = await createNewProjectFromDatabaseWithQuickpick(profile as mssqlVscode.IConnectionInfo);
|
||||||
if (model) {
|
if (model) {
|
||||||
await this.createProjectFromDatabaseCallback(model, profile as mssqlVscode.IConnectionInfo);
|
await this.createProjectFromDatabaseCallback(model, profile as mssqlVscode.IConnectionInfo, (profile as mssqlVscode.IConnectionInfo)?.server);
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@@ -1586,7 +1586,7 @@ export class ProjectsController {
|
|||||||
return new CreateProjectFromDatabaseDialog(profile);
|
return new CreateProjectFromDatabaseDialog(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async createProjectFromDatabaseCallback(model: ImportDataModel, connectionInfo?: string | mssqlVscode.IConnectionInfo) {
|
public async createProjectFromDatabaseCallback(model: ImportDataModel, connectionInfo?: string | mssqlVscode.IConnectionInfo, serverName?: string) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
const newProjFolderUri = model.filePath;
|
const newProjFolderUri = model.filePath;
|
||||||
@@ -1601,7 +1601,7 @@ export class ProjectsController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (serverInfo) {
|
if (serverInfo) {
|
||||||
targetPlatform = await utils.getTargetPlatformFromServerVersion(serverInfo);
|
targetPlatform = await utils.getTargetPlatformFromServerVersion(serverInfo, serverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
const newProjFilePath = await this.createNewProject({
|
const newProjFilePath = await this.createNewProject({
|
||||||
|
|||||||
@@ -321,7 +321,8 @@ declare module 'sqldbproj' {
|
|||||||
sqlServer2022 = 'SQL Server 2022',
|
sqlServer2022 = 'SQL Server 2022',
|
||||||
sqlAzure = 'Azure SQL Database',
|
sqlAzure = 'Azure SQL Database',
|
||||||
sqlDW = 'Azure Synapse SQL Pool',
|
sqlDW = 'Azure Synapse SQL Pool',
|
||||||
sqlEdge = 'Azure SQL Edge'
|
sqlEdge = 'Azure SQL Edge',
|
||||||
|
sqlDwUnified = 'Synapse Data Warehouse in Microsoft Fabric'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ISqlConnectionProperties {
|
export interface ISqlConnectionProperties {
|
||||||
|
|||||||
Reference in New Issue
Block a user