From d0861f01ed587a289187887614b256b4191e12c4 Mon Sep 17 00:00:00 2001 From: Sakshi Sharma <57200045+SakshiS-harma@users.noreply.github.com> Date: Wed, 14 Dec 2022 08:43:17 -0800 Subject: [PATCH] Update string to enum for folder structure (#21406) * Update string to enum * Remove newly added enum value --- .../src/test/schemaCompare.test.ts | 28 +++++++++---------- extensions/mssql/src/mssql.d.ts | 2 +- .../src/dialogs/schemaCompareDialog.ts | 27 ++++++++++++++---- .../src/schemaCompareMainWindow.ts | 8 +++--- .../schema-compare/src/test/testUtils.ts | 4 +-- .../src/controllers/mainController.ts | 2 +- .../src/controllers/projectController.ts | 25 ++--------------- .../createProjectFromDatabaseDialog.ts | 18 +----------- .../createProjectFromDatabaseQuickpick.ts | 2 +- .../updateProjectFromDatabaseDialog.ts | 5 ++-- .../src/dialogs/utils.ts | 21 ++++++++++++++ 11 files changed, 71 insertions(+), 71 deletions(-) diff --git a/extensions/integration-tests/src/test/schemaCompare.test.ts b/extensions/integration-tests/src/test/schemaCompare.test.ts index f57b1b54ba..d5f6660355 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: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -68,7 +68,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -123,7 +123,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: sourceDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -136,7 +136,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -196,7 +196,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -209,7 +209,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -256,7 +256,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -269,7 +269,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -330,7 +330,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -343,7 +343,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -413,7 +413,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -426,7 +426,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -484,7 +484,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: '', ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined @@ -497,7 +497,7 @@ suite('Schema compare integration test suite @DacFx@', () => { databaseName: targetDB, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', connectionDetails: undefined diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index 4d08e9526e..97904c4245 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: string; + folderStructure: ExtractTarget; dataSchemaProvider: string; } diff --git a/extensions/schema-compare/src/dialogs/schemaCompareDialog.ts b/extensions/schema-compare/src/dialogs/schemaCompareDialog.ts index dd89d4c01a..d35a0f54f0 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: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, packageFilePath: '', dataSchemaProvider: '', connectionDetails: undefined, @@ -133,7 +133,7 @@ export class SchemaCompareDialog { ownerUri: '', projectFilePath: '', targetScripts: [], - folderStructure: '', + folderStructure: 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: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, serverDisplayName: '', serverName: '', databaseName: '', @@ -165,7 +165,7 @@ export class SchemaCompareDialog { databaseName: this.targetDatabaseDropdown.value.toString(), ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], packageFilePath: '', dataSchemaProvider: '', @@ -180,7 +180,7 @@ export class SchemaCompareDialog { databaseName: '', ownerUri: '', projectFilePath: '', - folderStructure: '', + folderStructure: 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: this.targetStructureDropdown!.value as string, + folderStructure: mapExtractTargetEnum(this.targetStructureDropdown!.value), targetScripts: await this.getProjectScriptFiles(this.targetTextBox.value), dataSchemaProvider: await this.getDatabaseSchemaProvider(this.targetTextBox.value), serverDisplayName: '', @@ -1015,3 +1015,18 @@ function isNullOrUndefined(val: any): boolean { return val === null || val === undefined; } +/** + * Function to map folder structure string to enum + * @param inputTarget folder structure in string + * @returns folder structure in enum format + */ +export function mapExtractTargetEnum(inputTarget: string): mssql.ExtractTarget { + switch (inputTarget) { + case loc.file: return mssql.ExtractTarget.file; + case loc.flat: return mssql.ExtractTarget.flat; + case loc.objectType: return mssql.ExtractTarget.objectType; + case loc.schema: return mssql.ExtractTarget.schema; + case loc.schemaObjectType: + default: return mssql.ExtractTarget.schemaObjectType; + } +} diff --git a/extensions/schema-compare/src/schemaCompareMainWindow.ts b/extensions/schema-compare/src/schemaCompareMainWindow.ts index d5e10515fb..d13d631601 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: '' + folderStructure: mssql.ExtractTarget.schemaObjectType }; } else if (sourceDacpac) { source = { @@ -145,7 +145,7 @@ export class SchemaCompareMainWindow { projectFilePath: '', targetScripts: [], dataSchemaProvider: '', - folderStructure: '' + folderStructure: mssql.ExtractTarget.schemaObjectType }; } else if (sourceProject) { source = { @@ -159,7 +159,7 @@ export class SchemaCompareMainWindow { projectFilePath: sourceProject, targetScripts: [], dataSchemaProvider: undefined, - folderStructure: '' + folderStructure: mssql.ExtractTarget.schemaObjectType }; } @@ -1152,7 +1152,7 @@ export class SchemaCompareMainWindow { projectFilePath: endpoint.projectFilePath, targetScripts: [], dataSchemaProvider: '', - folderStructure: loc.schemaObjectType // TODO: Pick this automatically from the scmp file, after issue #20332 is resolved (check dsp as well) + folderStructure: mssql.ExtractTarget.schemaObjectType // TODO: Pick this automatically from the scmp file, after issue #20332 is resolved (check dsp as well) }; } 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 9681ef9d54..1f55640c3e 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: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', }; @@ -66,7 +66,7 @@ export const mockDatabaseEndpoint: mssql.SchemaCompareEndpointInfo = { packageFilePath: '', connectionDetails: undefined, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', }; diff --git a/extensions/sql-database-projects/src/controllers/mainController.ts b/extensions/sql-database-projects/src/controllers/mainController.ts index 62e077d2bf..1901499865 100644 --- a/extensions/sql-database-projects/src/controllers/mainController.ts +++ b/extensions/sql-database-projects/src/controllers/mainController.ts @@ -64,7 +64,7 @@ export default class MainController implements vscode.Disposable { this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.build', async (node: WorkspaceTreeItem) => { return this.projectsController.buildProject(node); })); this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.publish', async (node: WorkspaceTreeItem) => { return this.projectsController.publishProject(node); })); this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.schemaCompare', async (node: WorkspaceTreeItem) => { return this.projectsController.schemaCompare(node); })); - this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.schemaComparePublishProjectChanges', async (operationId: string, projectFilePath: string, folderStructure: string): Promise => { return await this.projectsController.schemaComparePublishProjectChanges(operationId, projectFilePath, folderStructure); })); + this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.schemaComparePublishProjectChanges', async (operationId: string, projectFilePath: string, folderStructure: mssql.ExtractTarget): Promise => { return await this.projectsController.schemaComparePublishProjectChanges(operationId, projectFilePath, folderStructure); })); this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.updateProjectFromDatabase', async (node: azdataType.IConnectionProfile | vscodeMssql.ITreeNodeInfo | WorkspaceTreeItem) => { await this.projectsController.updateProjectFromDatabase(node); })); this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.createProjectFromDatabase', async (context: azdataType.IConnectionProfile | vscodeMssql.ITreeNodeInfo | undefined) => { return this.projectsController.createProjectFromDatabase(context); })); this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.generateProjectFromOpenApiSpec', async (options?: GenerateProjectFromOpenApiSpecOptions) => { return this.projectsController.generateProjectFromOpenApiSpec(options); })); diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index dc23e55779..f43e040886 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -1693,34 +1693,13 @@ export class ProjectsController { * @param folderStructure folder structure to use when updating the target project * @returns */ - public async schemaComparePublishProjectChanges(operationId: string, projectFilePath: string, folderStructure: string): Promise { + public async schemaComparePublishProjectChanges(operationId: string, projectFilePath: string, folderStructure: mssql.ExtractTarget): Promise { const ext = vscode.extensions.getExtension(mssql.extension.name)!; const service = (await ext.activate() as mssql.IExtension).schemaCompare; const projectPath = path.dirname(projectFilePath); - let fs: mssql.ExtractTarget; - - switch (folderStructure) { - case constants.file: - fs = mssql.ExtractTarget.file; - break; - case constants.flat: - fs = mssql.ExtractTarget.flat; - break; - case constants.objectType: - fs = mssql.ExtractTarget.objectType; - break; - case constants.schema: - fs = mssql.ExtractTarget.schema; - break; - case constants.schemaObjectType: - default: - fs = mssql.ExtractTarget.schemaObjectType; - break; - } - - const result: mssql.SchemaComparePublishProjectResult = await service.schemaComparePublishProjectChanges(operationId, projectPath, fs, utils.getAzdataApi()!.TaskExecutionMode.execute); + const result: mssql.SchemaComparePublishProjectResult = await service.schemaComparePublishProjectChanges(operationId, projectPath, folderStructure, utils.getAzdataApi()!.TaskExecutionMode.execute); if (!result.errorMessage) { const project = await Project.openProject(projectFilePath); diff --git a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts index dffaca4d61..3ff992e4bd 100644 --- a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts +++ b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseDialog.ts @@ -7,14 +7,13 @@ import type * as azdataType from 'azdata'; import * as vscode from 'vscode'; import * as constants from '../common/constants'; import * as newProjectTool from '../tools/newProjectTool'; -import * as mssql from 'mssql'; import * as path from 'path'; import { IconPathHelper } from '../common/iconHelper'; import { cssStyles } from '../common/uiConstants'; import { ImportDataModel } from '../models/api/import'; import { Deferred } from '../common/promise'; -import { getConnectionName } from './utils'; +import { getConnectionName, mapExtractTargetEnum } from './utils'; import { exists, getAzdataApi, getDataWorkspaceExtensionApi } from '../common/utils'; export class CreateProjectFromDatabaseDialog { @@ -457,18 +456,3 @@ export class CreateProjectFromDatabaseDialog { }; } } - -export function mapExtractTargetEnum(inputTarget: string): mssql.ExtractTarget { - if (inputTarget) { - switch (inputTarget) { - case constants.file: return mssql.ExtractTarget.file; - case constants.flat: return mssql.ExtractTarget.flat; - case constants.objectType: return mssql.ExtractTarget.objectType; - case constants.schema: return mssql.ExtractTarget.schema; - case constants.schemaObjectType: return mssql.ExtractTarget.schemaObjectType; - default: throw new Error(constants.invalidInput(inputTarget)); - } - } else { - throw new Error(constants.extractTargetRequired); - } -} diff --git a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts index 5b02f70084..edb26ae2a1 100644 --- a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts +++ b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts @@ -10,7 +10,7 @@ import { exists, getVscodeMssqlApi } from '../common/utils'; import { IConnectionInfo } from 'vscode-mssql'; import { defaultProjectNameFromDb, defaultProjectSaveLocation } from '../tools/newProjectTool'; import { ImportDataModel } from '../models/api/import'; -import { mapExtractTargetEnum } from './createProjectFromDatabaseDialog'; +import { mapExtractTargetEnum } from './utils'; import { getSDKStyleProjectInfo } from './quickpickHelper'; diff --git a/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts b/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts index 68136b7b9f..5cd5deeea3 100644 --- a/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts +++ b/extensions/sql-database-projects/src/dialogs/updateProjectFromDatabaseDialog.ts @@ -17,6 +17,7 @@ import { IconPathHelper } from '../common/iconHelper'; import { UpdateProjectDataModel, UpdateProjectAction } from '../models/api/updateProject'; import { exists, getAzdataApi, getDataWorkspaceExtensionApi } from '../common/utils'; import * as path from 'path'; +import { mapExtractTargetEnum } from './utils'; export class UpdateProjectFromDatabaseDialog { public dialog: azdata.window.Dialog; @@ -537,7 +538,7 @@ export class UpdateProjectFromDatabaseDialog { connectionDetails: connectionDetails, ownerUri: ownerUri, projectFilePath: '', - folderStructure: '', + folderStructure: mssql.ExtractTarget.schemaObjectType, targetScripts: [], dataSchemaProvider: '', packageFilePath: '', @@ -547,7 +548,7 @@ export class UpdateProjectFromDatabaseDialog { const targetEndpointInfo: mssql.SchemaCompareEndpointInfo = { endpointType: mssql.SchemaCompareEndpointType.Project, projectFilePath: this.projectFileTextBox!.value!, - folderStructure: this.folderStructureDropDown!.value as string, + folderStructure: mapExtractTargetEnum(this.folderStructureDropDown!.value), targetScripts: [], dataSchemaProvider: '', connectionDetails: connectionDetails, diff --git a/extensions/sql-database-projects/src/dialogs/utils.ts b/extensions/sql-database-projects/src/dialogs/utils.ts index f607b66805..96f19a4dc5 100644 --- a/extensions/sql-database-projects/src/dialogs/utils.ts +++ b/extensions/sql-database-projects/src/dialogs/utils.ts @@ -6,6 +6,7 @@ import { SqlTargetPlatform } from 'sqldbproj'; import * as constants from '../common/constants'; import * as utils from '../common/utils'; +import * as mssql from 'mssql'; import { HttpClient } from '../common/httpClient'; import { AgreementInfo, DockerImageInfo } from '../models/deploy/deployProfile'; @@ -193,3 +194,23 @@ export function getDefaultDockerImageWithTag(projectTargetVersion: string, docke return dockerImage; } + +/** + * Function to map folder structure string to enum + * @param inputTarget folder structure in string + * @returns folder structure in enum format + */ +export function mapExtractTargetEnum(inputTarget: string): mssql.ExtractTarget { + if (inputTarget) { + switch (inputTarget) { + case constants.file: return mssql.ExtractTarget.file; + case constants.flat: return mssql.ExtractTarget.flat; + case constants.objectType: return mssql.ExtractTarget.objectType; + case constants.schema: return mssql.ExtractTarget.schema; + case constants.schemaObjectType: return mssql.ExtractTarget.schemaObjectType; + default: throw new Error(constants.invalidInput(inputTarget)); + } + } else { + throw new Error(constants.extractTargetRequired); + } +}