diff --git a/extensions/mssql/config.json b/extensions/mssql/config.json index 013b247f57..d6c8effee5 100644 --- a/extensions/mssql/config.json +++ b/extensions/mssql/config.json @@ -1,6 +1,6 @@ { "downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/{#version#}/microsoft.sqltools.servicelayer-{#fileName#}", - "version": "4.3.0.32", + "version": "4.3.0.37", "downloadFileNames": { "Windows_86": "win-x86-net6.0.zip", "Windows_64": "win-x64-net6.0.zip", diff --git a/extensions/mssql/src/contracts.ts b/extensions/mssql/src/contracts.ts index e0c415eebc..25c7cd7d23 100644 --- a/extensions/mssql/src/contracts.ts +++ b/extensions/mssql/src/contracts.ts @@ -508,6 +508,7 @@ export interface ExtractParams { ownerUri: string; extractTarget?: mssql.ExtractTarget; taskExecutionMode: TaskExecutionMode; + includePermissions?: boolean; } export interface DeployParams { diff --git a/extensions/mssql/src/dacfx/dacFxService.ts b/extensions/mssql/src/dacfx/dacFxService.ts index 0f6b7d1a6c..e4ee892247 100644 --- a/extensions/mssql/src/dacfx/dacFxService.ts +++ b/extensions/mssql/src/dacfx/dacFxService.ts @@ -65,8 +65,8 @@ export class DacFxService implements mssql.IDacFxService { ); } - public createProjectFromDatabase(databaseName: string, targetFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, extractTarget: mssql.ExtractTarget, taskExecutionMode: azdata.TaskExecutionMode): Thenable { - const params: contracts.ExtractParams = { databaseName: databaseName, packageFilePath: targetFilePath, applicationName: applicationName, applicationVersion: applicationVersion, ownerUri: ownerUri, extractTarget: extractTarget, taskExecutionMode: taskExecutionMode }; + public createProjectFromDatabase(databaseName: string, targetFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, extractTarget: mssql.ExtractTarget, taskExecutionMode: azdata.TaskExecutionMode, includePermissions?: boolean): Thenable { + const params: contracts.ExtractParams = { databaseName: databaseName, packageFilePath: targetFilePath, applicationName: applicationName, applicationVersion: applicationVersion, ownerUri: ownerUri, extractTarget: extractTarget, taskExecutionMode: taskExecutionMode, includePermissions: includePermissions }; return this.client.sendRequest(contracts.ExtractRequest.type, params).then( undefined, e => { diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index 53ac5fadb7..0728a2f075 100644 --- a/extensions/mssql/src/mssql.d.ts +++ b/extensions/mssql/src/mssql.d.ts @@ -240,7 +240,7 @@ declare module 'mssql' { exportBacpac(databaseName: string, packageFilePath: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable; importBacpac(packageFilePath: string, databaseName: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable; extractDacpac(databaseName: string, packageFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable; - createProjectFromDatabase(databaseName: string, targetFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, extractTarget: ExtractTarget, taskExecutionMode: azdata.TaskExecutionMode): Thenable; + createProjectFromDatabase(databaseName: string, targetFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, extractTarget: ExtractTarget, taskExecutionMode: azdata.TaskExecutionMode, includePermissions?: boolean): Thenable; deployDacpac(packageFilePath: string, databaseName: string, upgradeExisting: boolean, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode, sqlCommandVariableValues?: Record, deploymentOptions?: DeploymentOptions): Thenable; generateDeployScript(packageFilePath: string, databaseName: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode, sqlCommandVariableValues?: Record, deploymentOptions?: DeploymentOptions): Thenable; generateDeployPlan(packageFilePath: string, databaseName: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable; diff --git a/extensions/sql-database-projects/package.json b/extensions/sql-database-projects/package.json index 25c8ce74b0..c739223995 100644 --- a/extensions/sql-database-projects/package.json +++ b/extensions/sql-database-projects/package.json @@ -7,7 +7,7 @@ "preview": true, "engines": { "vscode": "^1.30.1", - "azdata": ">=1.38.0" + "azdata": ">=1.40.0" }, "license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt", "icon": "images/sqlDatabaseProjects.png", diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index 395a4e58bd..88b9143e28 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -296,6 +296,7 @@ export const projectLocationPlaceholderText = localize('projectLocationPlacehold export const browseButtonText = localize('browseButtonText', "Browse folder"); export const selectFolderStructure = localize('selectFolderStructure', "Select folder structure"); export const folderStructureLabel = localize('folderStructureLabel', "Folder structure"); +export const includePermissionsLabel = localize('includePermissionsLabel', "Include permissions"); export const WorkspaceFileExtension = '.code-workspace'; export const browseEllipsisWithIcon = `$(folder) ${localize('browseEllipsis', "Browse...")}`; export const selectProjectLocation = localize('selectProjectLocation', "Select project location"); diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index 3adea58d64..c19e854b65 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -1508,7 +1508,7 @@ export class ProjectsController { const azdataApi = utils.getAzdataApi(); if (azdataApi) { - await (service as mssql.IDacFxService).createProjectFromDatabase(model.database, model.filePath, model.projName, model.version, model.connectionUri, model.extractTarget as mssql.ExtractTarget, azdataApi.TaskExecutionMode.execute); + await (service as mssql.IDacFxService).createProjectFromDatabase(model.database, model.filePath, model.projName, model.version, model.connectionUri, model.extractTarget as mssql.ExtractTarget, azdataApi.TaskExecutionMode.execute, model.includePermissions); } else { await (service as mssqlVscode.IDacFxService).createProjectFromDatabase(model.database, model.filePath, model.projName, model.version, model.connectionUri, model.extractTarget as mssqlVscode.ExtractTarget, TaskExecutionMode.execute as unknown as mssqlVscode.TaskExecutionMode); } diff --git a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts index 9c1ac0fb44..dffaca4d61 100644 --- a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts +++ b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts @@ -26,6 +26,7 @@ export class CreateProjectFromDatabaseDialog { public projectNameTextBox: azdataType.InputBoxComponent | undefined; public projectLocationTextBox: azdataType.InputBoxComponent | undefined; public folderStructureDropDown: azdataType.DropDownComponent | undefined; + public includePermissionsCheckbox: azdataType.CheckBoxComponent | undefined; public sdkStyleCheckbox: azdataType.CheckBoxComponent | undefined; private formBuilder: azdataType.FormBuilder | undefined; private connectionId: string | undefined; @@ -109,8 +110,10 @@ export class CreateProjectFromDatabaseDialog { targetProjectFormSection.addItems([projectNameRow, projectLocationRow]); const folderStructureRow = this.createFolderStructureRow(view); - const createProjectSettingsFormSection = view.modelBuilder.flexContainer().withLayout({ flexFlow: 'column' }).component(); - createProjectSettingsFormSection.addItems([folderStructureRow]); + + this.includePermissionsCheckbox = view.modelBuilder.checkBox().withProps({ + label: constants.includePermissionsLabel, + }).component(); // could also potentially be radio buttons once there's a term to refer to "legacy" style sqlprojs this.sdkStyleCheckbox = view.modelBuilder.checkBox().withProps({ @@ -150,7 +153,10 @@ export class CreateProjectFromDatabaseDialog { title: constants.createProjectSettings, components: [ { - component: createProjectSettingsFormSection, + component: folderStructureRow, + }, + { + component: this.includePermissionsCheckbox }, { component: sdkFormComponentGroup @@ -407,7 +413,8 @@ export class CreateProjectFromDatabaseDialog { filePath: this.projectLocationTextBox!.value!, version: '1.0.0.0', extractTarget: mapExtractTargetEnum(this.folderStructureDropDown!.value), - sdkStyle: this.sdkStyleCheckbox?.checked! + sdkStyle: this.sdkStyleCheckbox?.checked!, + includePermissions: this.includePermissionsCheckbox?.checked }; azdataApi!.window.closeDialog(this.dialog); diff --git a/extensions/sql-database-projects/src/models/api/import.ts b/extensions/sql-database-projects/src/models/api/import.ts index 78965599b4..a5bc46a726 100644 --- a/extensions/sql-database-projects/src/models/api/import.ts +++ b/extensions/sql-database-projects/src/models/api/import.ts @@ -19,4 +19,5 @@ export interface ImportDataModel { version: string; extractTarget: ExtractTarget; sdkStyle: boolean; + includePermissions?: boolean; } diff --git a/extensions/sql-database-projects/src/test/dialogs/createProjectFromDatabaseDialog.test.ts b/extensions/sql-database-projects/src/test/dialogs/createProjectFromDatabaseDialog.test.ts index 1b4992f148..7bdee76fda 100644 --- a/extensions/sql-database-projects/src/test/dialogs/createProjectFromDatabaseDialog.test.ts +++ b/extensions/sql-database-projects/src/test/dialogs/createProjectFromDatabaseDialog.test.ts @@ -109,7 +109,8 @@ describe('Create Project From Database Dialog', () => { filePath: 'testLocation', version: '1.0.0.0', extractTarget: mssql.ExtractTarget.schemaObjectType, - sdkStyle: true + sdkStyle: true, + includePermissions: undefined }; dialog.createProjectFromDatabaseCallback = (m) => { model = m; };