mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
||||||
"version": "1.5.0-alpha.85",
|
"version": "1.5.0-alpha.87",
|
||||||
"downloadFileNames": {
|
"downloadFileNames": {
|
||||||
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
||||||
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
||||||
|
|||||||
@@ -448,6 +448,13 @@ export interface SchemaCompareGenerateScriptParams {
|
|||||||
taskExecutionMode: TaskExecutionMode;
|
taskExecutionMode: TaskExecutionMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SchemaComparePublishChangesParams {
|
||||||
|
operationId: string;
|
||||||
|
targetServerName: string;
|
||||||
|
targetDatabaseName: string;
|
||||||
|
taskExecutionMode: TaskExecutionMode;
|
||||||
|
}
|
||||||
|
|
||||||
export namespace SchemaCompareRequest {
|
export namespace SchemaCompareRequest {
|
||||||
export const type = new RequestType<SchemaCompareParams, azdata.SchemaCompareResult, void, void>('schemaCompare/compare');
|
export const type = new RequestType<SchemaCompareParams, azdata.SchemaCompareResult, void, void>('schemaCompare/compare');
|
||||||
}
|
}
|
||||||
@@ -455,4 +462,8 @@ export namespace SchemaCompareRequest {
|
|||||||
export namespace SchemaCompareGenerateScriptRequest {
|
export namespace SchemaCompareGenerateScriptRequest {
|
||||||
export const type = new RequestType<SchemaCompareGenerateScriptParams, azdata.ResultStatus, void, void>('schemaCompare/generateScript');
|
export const type = new RequestType<SchemaCompareGenerateScriptParams, azdata.ResultStatus, void, void>('schemaCompare/generateScript');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export namespace SchemaComparePublishChangesRequest {
|
||||||
|
export const type = new RequestType<SchemaComparePublishChangesParams, azdata.ResultStatus, void, void>('schemaCompare/publish');
|
||||||
|
}
|
||||||
// ------------------------------- <Schema Compare> -----------------------------
|
// ------------------------------- <Schema Compare> -----------------------------
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ export class SchemaCompareServicesFeature extends SqlOpsFeature<undefined> {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
let schemaCompareGenerateScript = (operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.DacFxResult> => {
|
let schemaCompareGenerateScript = (operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> => {
|
||||||
let params: contracts.SchemaCompareGenerateScriptParams = { operationId: operationId, targetDatabaseName: targetDatabaseName, scriptFilePath: scriptFilePath, taskExecutionMode: taskExecutionMode };
|
let params: contracts.SchemaCompareGenerateScriptParams = { operationId: operationId, targetDatabaseName: targetDatabaseName, scriptFilePath: scriptFilePath, taskExecutionMode: taskExecutionMode };
|
||||||
return client.sendRequest(contracts.SchemaCompareGenerateScriptRequest.type, params).then(
|
return client.sendRequest(contracts.SchemaCompareGenerateScriptRequest.type, params).then(
|
||||||
r => {
|
r => {
|
||||||
@@ -191,10 +191,24 @@ export class SchemaCompareServicesFeature extends SqlOpsFeature<undefined> {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let schemaComparePublishChanges = (operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> => {
|
||||||
|
let params: contracts.SchemaComparePublishChangesParams = { operationId: operationId, targetServerName: targetServerName, targetDatabaseName: targetDatabaseName, taskExecutionMode: taskExecutionMode };
|
||||||
|
return client.sendRequest(contracts.SchemaComparePublishChangesRequest.type, params).then(
|
||||||
|
r => {
|
||||||
|
return r;
|
||||||
|
},
|
||||||
|
e => {
|
||||||
|
client.logFailedRequest(contracts.SchemaComparePublishChangesRequest.type, e);
|
||||||
|
return Promise.resolve(undefined);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return azdata.dataprotocol.registerSchemaCompareServicesProvider({
|
return azdata.dataprotocol.registerSchemaCompareServicesProvider({
|
||||||
providerId: client.providerId,
|
providerId: client.providerId,
|
||||||
schemaCompare,
|
schemaCompare,
|
||||||
schemaCompareGenerateScript
|
schemaCompareGenerateScript,
|
||||||
|
schemaComparePublishChanges
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ export class SchemaCompareDialog {
|
|||||||
sourceName = this.sourceTextBox.value;
|
sourceName = this.sourceTextBox.value;
|
||||||
sourceEndpointInfo = {
|
sourceEndpointInfo = {
|
||||||
endpointType: azdata.SchemaCompareEndpointType.dacpac,
|
endpointType: azdata.SchemaCompareEndpointType.dacpac,
|
||||||
|
serverName: '',
|
||||||
databaseName: '',
|
databaseName: '',
|
||||||
ownerUri: '',
|
ownerUri: '',
|
||||||
packageFilePath: this.sourceTextBox.value
|
packageFilePath: this.sourceTextBox.value
|
||||||
@@ -92,6 +93,7 @@ export class SchemaCompareDialog {
|
|||||||
|
|
||||||
sourceEndpointInfo = {
|
sourceEndpointInfo = {
|
||||||
endpointType: azdata.SchemaCompareEndpointType.database,
|
endpointType: azdata.SchemaCompareEndpointType.database,
|
||||||
|
serverName: (this.sourceServerDropdown.value as ConnectionDropdownValue).name,
|
||||||
databaseName: (<azdata.CategoryValue>this.sourceDatabaseDropdown.value).name,
|
databaseName: (<azdata.CategoryValue>this.sourceDatabaseDropdown.value).name,
|
||||||
ownerUri: ownerUri,
|
ownerUri: ownerUri,
|
||||||
packageFilePath: ''
|
packageFilePath: ''
|
||||||
@@ -103,6 +105,7 @@ export class SchemaCompareDialog {
|
|||||||
targetName = this.targetTextBox.value;
|
targetName = this.targetTextBox.value;
|
||||||
targetEndpointInfo = {
|
targetEndpointInfo = {
|
||||||
endpointType: azdata.SchemaCompareEndpointType.dacpac,
|
endpointType: azdata.SchemaCompareEndpointType.dacpac,
|
||||||
|
serverName: '',
|
||||||
databaseName: '',
|
databaseName: '',
|
||||||
ownerUri: '',
|
ownerUri: '',
|
||||||
packageFilePath: this.targetTextBox.value
|
packageFilePath: this.targetTextBox.value
|
||||||
@@ -113,6 +116,7 @@ export class SchemaCompareDialog {
|
|||||||
|
|
||||||
targetEndpointInfo = {
|
targetEndpointInfo = {
|
||||||
endpointType: azdata.SchemaCompareEndpointType.database,
|
endpointType: azdata.SchemaCompareEndpointType.database,
|
||||||
|
serverName: (this.targetServerDropdown.value as ConnectionDropdownValue).name,
|
||||||
databaseName: (<azdata.CategoryValue>this.targetDatabaseDropdown.value).name,
|
databaseName: (<azdata.CategoryValue>this.targetDatabaseDropdown.value).name,
|
||||||
ownerUri: ownerUri,
|
ownerUri: ownerUri,
|
||||||
packageFilePath: ''
|
packageFilePath: ''
|
||||||
|
|||||||
3
extensions/schema-compare/src/media/start-inverse.svg
Normal file
3
extensions/schema-compare/src/media/start-inverse.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14 8L4 15V1L14 8Z" fill="#4894FE"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 149 B |
3
extensions/schema-compare/src/media/start.svg
Normal file
3
extensions/schema-compare/src/media/start.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14 8L4 15V1L14 8Z" fill="#015CDA"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 149 B |
@@ -22,6 +22,7 @@ export class SchemaCompareResult {
|
|||||||
private switchButton: azdata.ButtonComponent;
|
private switchButton: azdata.ButtonComponent;
|
||||||
private compareButton: azdata.ButtonComponent;
|
private compareButton: azdata.ButtonComponent;
|
||||||
private generateScriptButton: azdata.ButtonComponent;
|
private generateScriptButton: azdata.ButtonComponent;
|
||||||
|
private applyButton: azdata.ButtonComponent;
|
||||||
private SchemaCompareActionMap: Map<Number, string>;
|
private SchemaCompareActionMap: Map<Number, string>;
|
||||||
private comparisonResult: azdata.SchemaCompareResult;
|
private comparisonResult: azdata.SchemaCompareResult;
|
||||||
private sourceNameComponent: azdata.TableComponent;
|
private sourceNameComponent: azdata.TableComponent;
|
||||||
@@ -65,16 +66,18 @@ export class SchemaCompareResult {
|
|||||||
this.createSwitchButton(view);
|
this.createSwitchButton(view);
|
||||||
this.createCompareButton(view);
|
this.createCompareButton(view);
|
||||||
this.createGenerateScriptButton(view);
|
this.createGenerateScriptButton(view);
|
||||||
|
this.createApplyButton(view);
|
||||||
this.resetButtons();
|
this.resetButtons();
|
||||||
|
|
||||||
let toolBar = view.modelBuilder.toolbarContainer();
|
let toolBar = view.modelBuilder.toolbarContainer();
|
||||||
toolBar.addToolbarItems([{
|
toolBar.addToolbarItems([{
|
||||||
component: this.compareButton
|
component: this.compareButton
|
||||||
}, {
|
}, {
|
||||||
component: this.generateScriptButton,
|
component: this.generateScriptButton
|
||||||
|
}, {
|
||||||
|
component: this.applyButton,
|
||||||
toolbarSeparatorAfter: true
|
toolbarSeparatorAfter: true
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
component: this.switchButton
|
component: this.switchButton
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
@@ -192,8 +195,10 @@ export class SchemaCompareResult {
|
|||||||
// only enable generate script button if the target is a db
|
// only enable generate script button if the target is a db
|
||||||
if (this.targetEndpointInfo.endpointType === azdata.SchemaCompareEndpointType.database) {
|
if (this.targetEndpointInfo.endpointType === azdata.SchemaCompareEndpointType.database) {
|
||||||
this.generateScriptButton.enabled = true;
|
this.generateScriptButton.enabled = true;
|
||||||
|
this.applyButton.enabled = true;
|
||||||
} else {
|
} else {
|
||||||
this.generateScriptButton.title = localize('schemaCompare.generateScriptButtonDisabledTitle', 'Generate script is enabled when the target is a database');
|
this.generateScriptButton.title = localize('schemaCompare.generateScriptButtonDisabledTitle', 'Generate script is enabled when the target is a database');
|
||||||
|
this.applyButton.title = localize('schemaCompare.applyButtonDisabledTitle', 'Apply is enabled when the target is a database');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.flexModel.addItem(this.noDifferencesLabel, { CSSStyles: { 'margin': 'auto' } });
|
this.flexModel.addItem(this.noDifferencesLabel, { CSSStyles: { 'margin': 'auto' } });
|
||||||
@@ -310,11 +315,33 @@ export class SchemaCompareResult {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private createApplyButton(view: azdata.ModelView) {
|
||||||
|
|
||||||
|
this.applyButton = view.modelBuilder.button().withProperties({
|
||||||
|
label: localize('schemaCompare.updateButton', 'Apply'),
|
||||||
|
iconPath: {
|
||||||
|
light: path.join(__dirname, 'media', 'start.svg'),
|
||||||
|
dark: path.join(__dirname, 'media', 'start-inverse.svg')
|
||||||
|
},
|
||||||
|
}).component();
|
||||||
|
|
||||||
|
this.applyButton.onDidClick(async (click) => {
|
||||||
|
let service = await SchemaCompareResult.getService('MSSQL');
|
||||||
|
let result = await service.schemaComparePublishChanges(this.comparisonResult.operationId, this.targetEndpointInfo.serverName, this.targetEndpointInfo.databaseName, azdata.TaskExecutionMode.execute);
|
||||||
|
if (!result || !result.success) {
|
||||||
|
vscode.window.showErrorMessage(
|
||||||
|
localize('schemaCompare.updateErrorMessage', "Schema Compare Apply failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private resetButtons(): void {
|
private resetButtons(): void {
|
||||||
this.compareButton.enabled = false;
|
this.compareButton.enabled = false;
|
||||||
this.switchButton.enabled = false;
|
this.switchButton.enabled = false;
|
||||||
this.generateScriptButton.enabled = false;
|
this.generateScriptButton.enabled = false;
|
||||||
|
this.applyButton.enabled = false;
|
||||||
this.generateScriptButton.title = localize('schemaCompare.generateScriptEnabledButton', 'Generate script to deploy changes to target');
|
this.generateScriptButton.title = localize('schemaCompare.generateScriptEnabledButton', 'Generate script to deploy changes to target');
|
||||||
|
this.applyButton.title = localize('schemaCompare.applyButtonEnabledTitle', 'Apply changes to target');
|
||||||
}
|
}
|
||||||
|
|
||||||
private createSwitchButton(view: azdata.ModelView): void {
|
private createSwitchButton(view: azdata.ModelView): void {
|
||||||
|
|||||||
2
src/sql/azdata.proposed.d.ts
vendored
2
src/sql/azdata.proposed.d.ts
vendored
@@ -1737,6 +1737,7 @@ declare module 'azdata' {
|
|||||||
export interface SchemaCompareEndpointInfo {
|
export interface SchemaCompareEndpointInfo {
|
||||||
endpointType: SchemaCompareEndpointType;
|
endpointType: SchemaCompareEndpointType;
|
||||||
packageFilePath: string;
|
packageFilePath: string;
|
||||||
|
serverName: string;
|
||||||
databaseName: string;
|
databaseName: string;
|
||||||
ownerUri: string;
|
ownerUri: string;
|
||||||
}
|
}
|
||||||
@@ -1744,6 +1745,7 @@ declare module 'azdata' {
|
|||||||
export interface SchemaCompareServicesProvider extends DataProvider {
|
export interface SchemaCompareServicesProvider extends DataProvider {
|
||||||
schemaCompare(sourceEndpointInfo: SchemaCompareEndpointInfo, targetEndpointInfo: SchemaCompareEndpointInfo, taskExecutionMode: TaskExecutionMode): Thenable<SchemaCompareResult>;
|
schemaCompare(sourceEndpointInfo: SchemaCompareEndpointInfo, targetEndpointInfo: SchemaCompareEndpointInfo, taskExecutionMode: TaskExecutionMode): Thenable<SchemaCompareResult>;
|
||||||
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: TaskExecutionMode): Thenable<ResultStatus>;
|
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: TaskExecutionMode): Thenable<ResultStatus>;
|
||||||
|
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: TaskExecutionMode): Thenable<ResultStatus>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Security service interfaces ------------------------------------------------------------------------
|
// Security service interfaces ------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export interface ISchemaCompareService {
|
|||||||
registerProvider(providerId: string, provider: azdata.SchemaCompareServicesProvider): void;
|
registerProvider(providerId: string, provider: azdata.SchemaCompareServicesProvider): void;
|
||||||
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode): void;
|
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode): void;
|
||||||
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): void;
|
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): void;
|
||||||
|
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SchemaCompareService implements ISchemaCompareService {
|
export class SchemaCompareService implements ISchemaCompareService {
|
||||||
@@ -43,6 +44,12 @@ export class SchemaCompareService implements ISchemaCompareService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
|
||||||
|
return this._runAction('', (runner) => {
|
||||||
|
return runner.schemaComparePublishChanges(operationId, targetServerName, targetDatabaseName, taskExecutionMode);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private _runAction<T>(uri: string, action: (handler: azdata.SchemaCompareServicesProvider) => Thenable<T>): Thenable<T> {
|
private _runAction<T>(uri: string, action: (handler: azdata.SchemaCompareServicesProvider) => Thenable<T>): Thenable<T> {
|
||||||
let providerId: string = this._connectionService.getProviderIdFromUri(uri);
|
let providerId: string = this._connectionService.getProviderIdFromUri(uri);
|
||||||
|
|
||||||
|
|||||||
@@ -462,6 +462,9 @@ export class MainThreadDataProtocol implements MainThreadDataProtocolShape {
|
|||||||
},
|
},
|
||||||
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
|
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
|
||||||
return self._proxy.$schemaCompareGenerateScript(handle, operationId, targetDatabaseName, scriptFilePath, taskExecutionMode);
|
return self._proxy.$schemaCompareGenerateScript(handle, operationId, targetDatabaseName, scriptFilePath, taskExecutionMode);
|
||||||
|
},
|
||||||
|
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
|
||||||
|
return self._proxy.$schemaComparePublishChanges(handle, operationId, targetServerName, targetDatabaseName, taskExecutionMode);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -463,6 +463,11 @@ export abstract class ExtHostDataProtocolShape {
|
|||||||
* Schema compare generate script
|
* Schema compare generate script
|
||||||
*/
|
*/
|
||||||
$schemaCompareGenerateScript(handle: number, operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> { throw ni(); }
|
$schemaCompareGenerateScript(handle: number, operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> { throw ni(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Schema compare publish changes
|
||||||
|
*/
|
||||||
|
$schemaComparePublishChanges(handle: number, operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.SchemaCompareResult> { throw ni(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user