Add include permissions option to create project from db dialog (#20823)

* add import permissions option to create project from db dialog

* change 'import' to 'include'

* update azdata dependency version

* update STS to 4.3.0.37

* fix test
This commit is contained in:
Kim Santiago
2022-10-13 11:01:37 -07:00
committed by GitHub
parent ed2a503c1b
commit 00800db506
10 changed files with 22 additions and 11 deletions

View File

@@ -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",

View File

@@ -508,6 +508,7 @@ export interface ExtractParams {
ownerUri: string;
extractTarget?: mssql.ExtractTarget;
taskExecutionMode: TaskExecutionMode;
includePermissions?: boolean;
}
export interface DeployParams {

View File

@@ -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<mssql.DacFxResult> {
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<mssql.DacFxResult> {
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 => {

View File

@@ -240,7 +240,7 @@ declare module 'mssql' {
exportBacpac(databaseName: string, packageFilePath: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<DacFxResult>;
importBacpac(packageFilePath: string, databaseName: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<DacFxResult>;
extractDacpac(databaseName: string, packageFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<DacFxResult>;
createProjectFromDatabase(databaseName: string, targetFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, extractTarget: ExtractTarget, taskExecutionMode: azdata.TaskExecutionMode): Thenable<DacFxResult>;
createProjectFromDatabase(databaseName: string, targetFilePath: string, applicationName: string, applicationVersion: string, ownerUri: string, extractTarget: ExtractTarget, taskExecutionMode: azdata.TaskExecutionMode, includePermissions?: boolean): Thenable<DacFxResult>;
deployDacpac(packageFilePath: string, databaseName: string, upgradeExisting: boolean, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode, sqlCommandVariableValues?: Record<string, string>, deploymentOptions?: DeploymentOptions): Thenable<DacFxResult>;
generateDeployScript(packageFilePath: string, databaseName: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode, sqlCommandVariableValues?: Record<string, string>, deploymentOptions?: DeploymentOptions): Thenable<DacFxResult>;
generateDeployPlan(packageFilePath: string, databaseName: string, ownerUri: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<GenerateDeployPlanResult>;

View File

@@ -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",

View File

@@ -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");

View File

@@ -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);
}

View File

@@ -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(<string>this.folderStructureDropDown!.value),
sdkStyle: this.sdkStyleCheckbox?.checked!
sdkStyle: this.sdkStyleCheckbox?.checked!,
includePermissions: this.includePermissionsCheckbox?.checked
};
azdataApi!.window.closeDialog(this.dialog);

View File

@@ -19,4 +19,5 @@ export interface ImportDataModel {
version: string;
extractTarget: ExtractTarget;
sdkStyle: boolean;
includePermissions?: boolean;
}

View File

@@ -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; };