Add Create Project from Database quickpick (#16572)

* Add Create Project from Database quickpick

* fix test

* pr comments

* Add comment
This commit is contained in:
Charles Gagnon
2021-08-05 10:34:49 -07:00
committed by GitHub
parent 99b5c5ce8c
commit 2b103a79c3
8 changed files with 185 additions and 40 deletions

View File

@@ -36,6 +36,7 @@ import { IconPathHelper } from '../common/iconHelper';
import { DashboardData, PublishData, Status } from '../models/dashboardData/dashboardData';
import { launchPublishDatabaseQuickpick } from '../dialogs/publishDatabaseQuickpick';
import { SqlTargetPlatform } from 'sqldbproj';
import { createNewProjectFromDatabaseWithQuickpick } from '../dialogs/createProjectFromDatabaseQuickpick';
const maxTableLength = 10;
@@ -862,15 +863,24 @@ export class ProjectsController {
* Creates a new SQL database project from the existing database,
* prompting the user for a name, file path location and extract target
*/
public async createProjectFromDatabase(context: azdataType.IConnectionProfile | any): Promise<CreateProjectFromDatabaseDialog> {
public async createProjectFromDatabase(context: azdataType.IConnectionProfile | any): Promise<CreateProjectFromDatabaseDialog | undefined> {
const profile = this.getConnectionProfileFromContext(context);
let createProjectFromDatabaseDialog = this.getCreateProjectFromDatabaseDialog(profile);
if (utils.getAzdataApi()) {
let createProjectFromDatabaseDialog = this.getCreateProjectFromDatabaseDialog(profile);
createProjectFromDatabaseDialog.createProjectFromDatabaseCallback = async (model) => await this.createProjectFromDatabaseCallback(model);
createProjectFromDatabaseDialog.createProjectFromDatabaseCallback = async (model) => await this.createProjectFromDatabaseCallback(model);
await createProjectFromDatabaseDialog.openDialog();
await createProjectFromDatabaseDialog.openDialog();
return createProjectFromDatabaseDialog;
} else {
const model = await createNewProjectFromDatabaseWithQuickpick();
if (model) {
await this.createProjectFromDatabaseCallback(model);
}
return undefined;
}
return createProjectFromDatabaseDialog;
}
public getCreateProjectFromDatabaseDialog(profile: azdataType.IConnectionProfile | undefined): CreateProjectFromDatabaseDialog {
@@ -926,13 +936,14 @@ export class ProjectsController {
}
public async createProjectFromDatabaseApiCall(model: ImportDataModel): Promise<void> {
let ext = vscode.extensions.getExtension(mssql.extension.name)!;
const service = (await ext.activate() as mssql.IExtension).dacFx;
const ownerUri = await utils.getAzdataApi()!.connection.getUriForConnection(model.serverId);
await service.createProjectFromDatabase(model.database, model.filePath, model.projName, model.version, ownerUri, model.extractTarget, utils.getAzdataApi()!.TaskExecutionMode.execute);
const service = await utils.getDacFxService();
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);
} 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);
}
// TODO: Check for success; throw error
}