Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions mssql/src/models/contracts/restore/restoreContracts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { RequestType } from "vscode-languageclient";
import type * as mssql from "vscode-mssql";

/**
* Restore database request
*/
export namespace RestoreRequest {
export const type = new RequestType<mssql.RestoreParams, mssql.RestoreResponse, void, void>(
"restore/restore",
);
}

/**
* Get restore plan request
*/
export namespace RestorePlanRequest {
export const type = new RequestType<mssql.RestoreParams, mssql.RestorePlanResponse, void, void>(
"restore/restoreplan",
);
}

/**
* Cancel restore plan request
*/
export namespace CancelRestorePlanRequest {
export const type = new RequestType<mssql.RestoreParams, boolean, void, void>(
"restore/cancelrestoreplan",
);
}

/**
* Get restore configuration info request
*/
export namespace RestoreConfigInfoRequest {
export const type = new RequestType<
mssql.RestoreConfigInfoRequestParams,
mssql.RestoreConfigInfoResponse,
void,
void
>("restore/restoreconfiginfo");
}
59 changes: 59 additions & 0 deletions mssql/src/services/restoreService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import type * as mssql from "vscode-mssql";
import SqlToolsServiceClient from "../languageservice/serviceclient";
import * as restoreContracts from "../models/contracts/restore/restoreContracts";
import { TaskExecutionMode } from "../sharedInterfaces/schemaCompare";

export class RestoreService implements mssql.IRestoreService {
constructor(private _client: SqlToolsServiceClient) {}

public restore(
ownerUri: string,
options: { [key: string]: any },
taskExecutionMode: TaskExecutionMode,
): Thenable<mssql.RestoreResponse> {
const params: mssql.RestoreParams = {
ownerUri,
options,
taskExecutionMode,
};
return this._client.sendRequest(restoreContracts.RestoreRequest.type, params);
}

public getRestorePlan(
ownerUri: string,
options: { [key: string]: any },
taskExecutionMode: TaskExecutionMode,
): Thenable<mssql.RestorePlanResponse> {
const params: mssql.RestoreParams = {
ownerUri,
options,
taskExecutionMode,
};
return this._client.sendRequest(restoreContracts.RestorePlanRequest.type, params);
}

public cancelRestorePlan(
ownerUri: string,
options: { [key: string]: any },
taskExecutionMode: TaskExecutionMode,
): Thenable<boolean> {
const params: mssql.RestoreParams = {
ownerUri,
options,
taskExecutionMode,
};
return this._client.sendRequest(restoreContracts.CancelRestorePlanRequest.type, params);
}

public getRestoreConfigInfo(ownerUri: string): Thenable<mssql.RestoreConfigInfoResponse> {
const params: mssql.RestoreConfigInfoRequestParams = {
ownerUri,
};
return this._client.sendRequest(restoreContracts.RestoreConfigInfoRequest.type, params);
}
}
94 changes: 94 additions & 0 deletions mssql/typings/vscode-mssql.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,100 @@ declare module "vscode-mssql" {
): Thenable<ResultStatus>;
}

export interface IRestoreService {
/**
* Restore a database from backup files
* @param ownerUri Connection URI
* @param options Restore options
* @param taskExecutionMode Execution mode (execute or script)
* @returns Restore response with task ID
*/
restore(
ownerUri: string,
options: { [key: string]: any },
taskExecutionMode: TaskExecutionMode,
): Thenable<RestoreResponse>;

/**
* Create a restore plan from backup files
* @param ownerUri Connection URI
* @param options Restore plan options
* @param taskExecutionMode Execution mode
* @returns Restore plan response
*/
getRestorePlan(
ownerUri: string,
options: { [key: string]: any },
taskExecutionMode: TaskExecutionMode,
): Thenable<RestorePlanResponse>;

/**
* Cancel an active restore plan
* @param ownerUri Connection URI
* @param options Restore options with session ID
* @param taskExecutionMode Execution mode
* @returns True if cancelled successfully
*/
cancelRestorePlan(
ownerUri: string,
options: { [key: string]: any },
taskExecutionMode: TaskExecutionMode,
): Thenable<boolean>;

/**
* Get restore configuration information
* @param ownerUri Connection URI
* @returns Restore configuration info
*/
getRestoreConfigInfo(ownerUri: string): Thenable<RestoreConfigInfoResponse>;
}

export interface RestoreResponse {
result: boolean;
taskId: string;
errorMessage?: string;
}

export interface RestorePlanResponse {
sessionId: string;
backupSetsToRestore: DatabaseFileInfo[];
canRestore: boolean;
errorMessage?: string;
dbFiles: RestoreDatabaseFileInfo[];
databaseNamesFromBackupSets: string[];
planDetails: { [key: string]: RestorePlanDetailInfo };
}

export interface RestoreDatabaseFileInfo {
fileType: string;
logicalFileName: string;
originalFileName: string;
restoreAsFileName: string;
}

export interface RestorePlanDetailInfo {
name: string;
currentValue: any;
isReadOnly: boolean;
isVisible: boolean;
defaultValue: any;
}

export interface RestoreConfigInfoResponse {
configInfo: { [key: string]: any };
errorMessage?: string;
}

export interface RestoreParams {
ownerUri: string;
options: { [key: string]: any };
taskExecutionMode: TaskExecutionMode;
}

export interface RestoreConfigInfoRequestParams {
ownerUri: string;
}

/**
* Error that connect method throws if connection fails because of a fire wall rule error.
*/
Expand Down