From d69e5b97df19ec32dc41fd186c83b819e2ed72af Mon Sep 17 00:00:00 2001 From: Sakshi Sharma <57200045+SakshiS-harma@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:47:59 -0700 Subject: [PATCH] Update SC dialog to save/read file structure to/from schema compare file (#22727) * Read/Send ExtractTarget information from/to STS * Remove comment * Cleanup comment and update azdata dependency --- .../src/test/schemaCompare.test.ts | 28 +++++++++---------- extensions/mssql/src/mssql.d.ts | 2 +- extensions/schema-compare/package.json | 2 +- .../src/dialogs/schemaCompareDialog.ts | 26 ++++++++++++----- .../src/schemaCompareMainWindow.ts | 12 ++++---- .../schema-compare/src/test/testUtils.ts | 4 +-- .../src/controllers/projectController.ts | 2 +- .../updateProjectFromDatabaseDialog.ts | 6 ++-- 8 files changed, 47 insertions(+), 35 deletions(-) diff --git a/extensions/integration-tests/src/test/schemaCompare.test.ts b/extensions/integration-tests/src/test/schemaCompare.test.ts index d5f6660355..8acee3a81d 100644 --- a/extensions/integration-tests/src/test/schemaCompare.test.ts +++ b/extensions/integration-tests/src/test/schemaCompare.test.ts @@ -55,7 +55,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -68,7 +68,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -123,7 +123,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: sourceDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -136,7 +136,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -196,7 +196,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -209,7 +209,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -256,7 +256,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -269,7 +269,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -330,7 +330,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -343,7 +343,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -413,7 +413,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -426,7 +426,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -484,7 +484,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -497,7 +497,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index c35f12616b..ad35bff111 100644 --- a/extensions/mssql/src/mssql.d.ts +++ b/extensions/mssql/src/mssql.d.ts @@ -135,7 +135,7 @@ declare module 'mssql' { connectionName?: string; projectFilePath: string; targetScripts: string[]; - folderStructure: ExtractTarget; + extractTarget: ExtractTarget; dataSchemaProvider: string; } diff --git a/extensions/schema-compare/package.json b/extensions/schema-compare/package.json index 73ac7331d4..0ed5ae67dd 100644 --- a/extensions/schema-compare/package.json +++ b/extensions/schema-compare/package.json @@ -7,7 +7,7 @@ "preview": false, "engines": { "vscode": "^1.25.0", - "azdata": ">=1.40.0" + "azdata": ">=1.44.0" }, "license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt", "icon": "images/extension.png", diff --git a/extensions/schema-compare/src/dialogs/schemaCompareDialog.ts b/extensions/schema-compare/src/dialogs/schemaCompareDialog.ts index 14337cc54e..c58163f8e6 100644 --- a/extensions/schema-compare/src/dialogs/schemaCompareDialog.ts +++ b/extensions/schema-compare/src/dialogs/schemaCompareDialog.ts @@ -118,7 +118,7 @@ export class SchemaCompareDialog { ownerUri: ownerUri, projectFilePath: '', targetScripts: [], - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, packageFilePath: '', dataSchemaProvider: '', connectionDetails: undefined, @@ -133,7 +133,7 @@ export class SchemaCompareDialog { ownerUri: '', projectFilePath: '', targetScripts: [], - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, dataSchemaProvider: '', packageFilePath: this.sourceTextBox.value, connectionDetails: undefined @@ -144,7 +144,7 @@ export class SchemaCompareDialog { projectFilePath: this.sourceTextBox.value, targetScripts: await this.getProjectScriptFiles(this.sourceTextBox.value), dataSchemaProvider: await this.getDatabaseSchemaProvider(this.sourceTextBox.value), - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, serverDisplayName: '', serverName: '', databaseName: '', @@ -165,7 +165,7 @@ export class SchemaCompareDialog { databaseName: this.targetDatabaseDropdown.value.toString(), ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], packageFilePath: '', dataSchemaProvider: '', @@ -180,7 +180,7 @@ export class SchemaCompareDialog { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', packageFilePath: this.targetTextBox.value, @@ -190,7 +190,7 @@ export class SchemaCompareDialog { this.schemaCompareMainWindow.targetEndpointInfo = { endpointType: mssql.SchemaCompareEndpointType.Project, projectFilePath: this.targetTextBox.value, - folderStructure: mapExtractTargetEnum(this.targetStructureDropdown!.value), + extractTarget: mapExtractTargetEnum(this.targetStructureDropdown!.value), targetScripts: await this.getProjectScriptFiles(this.targetTextBox.value), dataSchemaProvider: await this.getDatabaseSchemaProvider(this.targetTextBox.value), serverDisplayName: '', @@ -447,13 +447,14 @@ export class SchemaCompareDialog { } private createStructureDropdown(): azdata.FormComponent { + const value = !this.schemaCompareMainWindow.targetEndpointInfo ? loc.schemaObjectType : mapExtractTargetToString(this.schemaCompareMainWindow.targetEndpointInfo.extractTarget); this.targetStructureDropdown = this.view.modelBuilder.dropDown().withProps({ editable: true, fireOnTextChange: true, ariaLabel: loc.targetStructure, width: this.textBoxWidth, values: [loc.file, loc.flat, loc.objectType, loc.schema, loc.schemaObjectType], - value: loc.schemaObjectType, + value: value, }).component(); return { @@ -1029,3 +1030,14 @@ export function mapExtractTargetEnum(inputTarget: string): mssql.ExtractTarget { default: return mssql.ExtractTarget.schemaObjectType; } } + +export function mapExtractTargetToString(inputTarget: mssql.ExtractTarget) { + switch (inputTarget) { + case mssql.ExtractTarget.file: return loc.file; + case mssql.ExtractTarget.flat: return loc.flat; + case mssql.ExtractTarget.objectType: return loc.objectType; + case mssql.ExtractTarget.schema: return loc.schema; + case mssql.ExtractTarget.schemaObjectType: + default: return loc.schemaObjectType; + } +} diff --git a/extensions/schema-compare/src/schemaCompareMainWindow.ts b/extensions/schema-compare/src/schemaCompareMainWindow.ts index 4883294555..7fa0270010 100644 --- a/extensions/schema-compare/src/schemaCompareMainWindow.ts +++ b/extensions/schema-compare/src/schemaCompareMainWindow.ts @@ -131,7 +131,7 @@ export class SchemaCompareMainWindow { projectFilePath: '', targetScripts: [], dataSchemaProvider: '', - folderStructure: mssql.ExtractTarget.schemaObjectType + extractTarget: mssql.ExtractTarget.schemaObjectType }; } else if (sourceDacpac) { source = { @@ -145,7 +145,7 @@ export class SchemaCompareMainWindow { projectFilePath: '', targetScripts: [], dataSchemaProvider: '', - folderStructure: mssql.ExtractTarget.schemaObjectType + extractTarget: mssql.ExtractTarget.schemaObjectType }; } else if (sourceProject) { source = { @@ -159,7 +159,7 @@ export class SchemaCompareMainWindow { projectFilePath: sourceProject, targetScripts: [], dataSchemaProvider: undefined, - folderStructure: mssql.ExtractTarget.schemaObjectType + extractTarget: mssql.ExtractTarget.schemaObjectType }; } @@ -889,7 +889,7 @@ export class SchemaCompareMainWindow { result = await service.schemaComparePublishDatabaseChanges(this.comparisonResult.operationId, this.targetEndpointInfo.serverName, this.targetEndpointInfo.databaseName, azdata.TaskExecutionMode.execute); break; case mssql.SchemaCompareEndpointType.Project: - result = await vscode.commands.executeCommand(loc.sqlDatabaseProjectsPublishChanges, this.comparisonResult.operationId, this.targetEndpointInfo.projectFilePath, this.targetEndpointInfo.folderStructure); + result = await vscode.commands.executeCommand(loc.sqlDatabaseProjectsPublishChanges, this.comparisonResult.operationId, this.targetEndpointInfo.projectFilePath, this.targetEndpointInfo.extractTarget); if (!result.success) { void vscode.window.showErrorMessage(loc.applyError); } @@ -1151,8 +1151,8 @@ export class SchemaCompareMainWindow { connectionDetails: undefined, projectFilePath: endpoint.projectFilePath, targetScripts: [], - dataSchemaProvider: '', - folderStructure: mssql.ExtractTarget.schemaObjectType // TODO: Pick this automatically from the scmp file, after issue #20332 is resolved (check dsp as well) + dataSchemaProvider: endpoint.dataSchemaProvider, + extractTarget: endpoint.extractTarget }; } else { // need to do this instead of just setting it to the endpoint because some fields are null which will cause an error when sending the compare request diff --git a/extensions/schema-compare/src/test/testUtils.ts b/extensions/schema-compare/src/test/testUtils.ts index 1f55640c3e..8b6962d04f 100644 --- a/extensions/schema-compare/src/test/testUtils.ts +++ b/extensions/schema-compare/src/test/testUtils.ts @@ -52,7 +52,7 @@ export const mockDacpacEndpoint: mssql.SchemaCompareEndpointInfo = { packageFilePath: mockFilePath, connectionDetails: undefined, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', }; @@ -66,7 +66,7 @@ export const mockDatabaseEndpoint: mssql.SchemaCompareEndpointInfo = { packageFilePath: '', connectionDetails: undefined, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', }; diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index 7a8fa90bed..0b7f9598ce 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -1821,7 +1821,7 @@ export class ProjectsController { } // Publish the changes (retrieved from the cache by operationId) - const publishResult = await this.schemaComparePublishProjectChanges(operationId, target.projectFilePath, target.folderStructure); + const publishResult = await this.schemaComparePublishProjectChanges(operationId, target.projectFilePath, target.extractTarget); if (publishResult.success) { void vscode.window.showInformationMessage(constants.applySuccess); diff --git a/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts b/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts index d8d98581f1..db871ed766 100644 --- a/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts +++ b/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts @@ -445,7 +445,7 @@ export class UpdateProjectFromDatabaseDialog { private createFolderStructureRow(view: azdata.ModelView): azdata.FlexContainer { this.folderStructureDropDown = view.modelBuilder.dropDown().withProps({ values: [constants.file, constants.flat, constants.objectType, constants.schema, constants.schemaObjectType], - value: constants.schemaObjectType, //TODO: Read this value from project info after fixing https://github.com/microsoft/azuredatastudio/issues/20332 + value: constants.schemaObjectType, ariaLabel: constants.folderStructureLabel, required: true, width: cssStyles.updateProjectFromDatabaseTextboxWidth @@ -560,7 +560,7 @@ export class UpdateProjectFromDatabaseDialog { connectionDetails: connectionDetails, ownerUri: ownerUri, projectFilePath: '', - folderStructure: mssql.ExtractTarget.schemaObjectType, + extractTarget: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', packageFilePath: '', @@ -570,7 +570,7 @@ export class UpdateProjectFromDatabaseDialog { const targetEndpointInfo: mssql.SchemaCompareEndpointInfo = { endpointType: mssql.SchemaCompareEndpointType.Project, projectFilePath: this.projectFileDropdown!.value! as string, - folderStructure: mapExtractTargetEnum(this.folderStructureDropDown!.value), + extractTarget: mapExtractTargetEnum(this.folderStructureDropDown!.value), targetScripts: [], dataSchemaProvider: '', connectionDetails: connectionDetails,