Compare commits

...

17 Commits

Author SHA1 Message Date
Alan Yu
295004c42e Adding CMS readme (#5417) 2019-05-07 17:59:15 -07:00
Alan Ren
45333e8852 bump the version of schema compare extension (#5411) 2019-05-07 17:59:06 -07:00
Aditya Bist
e1280022d6 Fix agent css in packaged builds (#5409)
* fix agent css in packaged

* fix agent css
2019-05-07 14:24:22 -07:00
Karl Burtram
c90d630703 Bump agent, import, profiler extension versions (#5405) 2019-05-07 13:03:28 -07:00
Karl Burtram
bfcdf28cbc Merge branch 'release/1.7' of https://github.com/Microsoft/azuredatastudio into release/1.7 2019-05-07 12:35:58 -07:00
Anthony Dresser
1c694cbd3b Fix css to fix new dashboard tab dialog (#5385)
* fix css to fix new dashboard tab dialog

* add readonly
2019-05-07 09:08:13 -07:00
kisantia
2b0aba119d bump dacpac extension version (#5387) 2019-05-07 09:08:04 -07:00
Karl Burtram
59cc8e5d7f Bump the VS Code version metadata (#5392) 2019-05-07 09:07:53 -07:00
Chris LaFreniere
f8da5bd1c7 Don't scroll when running code cell if in view (#5365) 2019-05-07 09:03:19 -07:00
Anthony Dresser
26667eb1dc Fix css to fix new dashboard tab dialog (#5385)
* fix css to fix new dashboard tab dialog

* add readonly
2019-05-06 17:33:26 -07:00
kisantia
5e6a9ca9fa bump dacpac extension version (#5387) 2019-05-06 17:33:19 -07:00
Karl Burtram
4ecf5fae84 Bump the VS Code version metadata (#5392) 2019-05-06 17:33:13 -07:00
Alan Ren
f76500d5f0 fix profiler formatter issue (#5372) 2019-05-06 15:58:55 -07:00
Maddy
2a212edf1e Maddy/newline overrides edit data (#5364)
* formatting it before displaying

* replace with space

* added comments and method to handle the line break space conversion
2019-05-06 15:58:47 -07:00
Anthony Dresser
7bcd19987b add a applystyle function with saftey checks in header filter (#5380) 2019-05-06 15:58:39 -07:00
Anthony Dresser
0ce5f02dd2 fix error icon (#5373) 2019-05-06 15:58:31 -07:00
udeeshagautam
0831e9e161 Changing the start for Schema compare and adding some text (#5356)
* Dialog Ok will not start Schema compare explit compare will. Adding wait text.

* Fixing variable name and spelling
2019-05-06 15:58:20 -07:00
20 changed files with 126 additions and 49 deletions

View File

@@ -2,7 +2,7 @@
"name": "agent",
"displayName": "SQL Server Agent",
"description": "Manage and troubleshoot SQL Server Agent jobs",
"version": "0.38.0",
"version": "0.39.0",
"publisher": "Microsoft",
"preview": true,
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",

28
extensions/cms/README.md Normal file
View File

@@ -0,0 +1,28 @@
# Microsoft Central Management Servers for Azure Data Studio
## Central Management Servers *(preview)*
The Central Management Servers extension allows users to store a list of instances of SQL Server that is organized into one or more groups. Actions that are taken using a CMS group act on all servers in the server group.
This experience is currently in its initial preview. Please report issues and feature requests [here.](https://github.com/microsoft/azuredatastudio/issues)
<img src="https://user-images.githubusercontent.com/30873802/57338070-eba5af00-70e0-11e9-911c-ddaa166b59b8.png" width="800px" />
### How do I start Central Management Servers?
Central Management Servers can be viewed by clicking on the Connections icon (Ctrl/Cmd + G). The first time you download the extension, the CMS view will be minimized, and you can open it by click on **Central Management Servers**
### Where can I learn more about Central Management Servers
To learn more conceptually about Central Management Servers, [you can read more here.](https://docs.microsoft.com/sql/ssms/register-servers/create-a-central-management-server-and-server-group)
## Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
## Privacy Statement
The [Microsoft Enterprise and Developer Privacy Statement](https://privacy.microsoft.com/en-us/privacystatement) describes the privacy statement of this software.
## License
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the [Source EULA](https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt).

View File

@@ -2,7 +2,7 @@
"name": "dacpac",
"displayName": "SQL Server Dacpac",
"description": "SQL Server Dacpac for Azure Data Studio.",
"version": "0.1.0",
"version": "0.2.0",
"publisher": "Microsoft",
"preview": true,
"engines": {

View File

@@ -2,7 +2,7 @@
"name": "import",
"displayName": "SQL Server Import",
"description": "SQL Server Import for Azure Data Studio supports importing CSV or JSON files into SQL Server.",
"version": "0.7.0",
"version": "0.8.0",
"publisher": "Microsoft",
"preview": true,
"engines": {

View File

@@ -2,7 +2,7 @@
"name": "profiler",
"displayName": "SQL Server Profiler",
"description": "SQL Server Profiler for Azure Data Studio",
"version": "0.7.0",
"version": "0.8.0",
"publisher": "Microsoft",
"preview": true,
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",

View File

@@ -2,7 +2,7 @@
"name": "schema-compare",
"displayName": "SQL Server Schema Compare",
"description": "SQL Server Schema Compare for Azure Data Studio supports comparing the schemas of databases and dacpacs.",
"version": "0.1.0",
"version": "0.2.0",
"publisher": "Microsoft",
"preview": true,
"engines": {

View File

@@ -11,7 +11,7 @@ import * as os from 'os';
import { SchemaCompareResult } from '../schemaCompareResult';
const localize = nls.loadMessageBundle();
const CompareButtonText: string = localize('schemaCompareDialog.compare', 'Compare');
const OkButtonText: string = localize('schemaCompareDialog.ok', 'Ok');
const CancelButtonText: string = localize('schemaCompareDialog.cancel', 'Cancel');
const SourceTitle: string = localize('schemaCompareDialog.SourceTitle', 'Source');
const TargetTitle: string = localize('schemaCompareDialog.TargetTitle', 'Target');
@@ -75,7 +75,7 @@ export class SchemaCompareDialog {
this.initializeDialog();
this.dialog.okButton.label = CompareButtonText;
this.dialog.okButton.label = OkButtonText;
this.dialog.okButton.onClick(async () => await this.execute());
this.dialog.cancelButton.label = CancelButtonText;

View File

@@ -16,6 +16,8 @@ const diffEditorTitle = localize('schemaCompare.ObjectDefinitionsTitle', 'Object
export class SchemaCompareResult {
private differencesTable: azdata.TableComponent;
private loader: azdata.LoadingComponent;
private startText: azdata.TextComponent;
private waitText: azdata.TextComponent;
private editor: azdata.workspace.ModelViewEditor;
private diffEditor: azdata.DiffEditorComponent;
private splitView: azdata.SplitViewContainer;
@@ -76,7 +78,7 @@ export class SchemaCompareResult {
this.createGenerateScriptButton(view);
this.createApplyButton(view);
this.createOptionsButton(view);
this.resetButtons();
this.resetButtons(true);
let toolBar = view.modelBuilder.toolbarContainer();
toolBar.addToolbarItems([{
@@ -131,15 +133,24 @@ export class SchemaCompareResult {
this.sourceTargetFlexLayout.addItem(this.targetNameComponent, { CSSStyles: { 'width': '45%', 'height': '25px', 'margin-top': '10px', 'margin-left': '15px' } });
this.loader = view.modelBuilder.loadingComponent().component();
this.waitText = view.modelBuilder.text().withProperties({
value: localize('schemaCompare.waitText', 'Initializing Comparison. This might take a moment.')
}).component();
this.startText = view.modelBuilder.text().withProperties({
value: localize('schemaCompare.startText', 'Press Compare to start Schema Comparison.')
}).component();
this.noDifferencesLabel = view.modelBuilder.text().withProperties({
value: localize('schemaCompare.noDifferences', 'No schema differences were found')
value: localize('schemaCompare.noDifferences', 'No schema differences were found.')
}).component();
this.flexModel = view.modelBuilder.flexContainer().component();
this.flexModel.addItem(toolBar.component(), { flex: 'none' });
this.flexModel.addItem(sourceTargetLabels, { flex: 'none' });
this.flexModel.addItem(this.sourceTargetFlexLayout, { flex: 'none' });
this.flexModel.addItem(this.loader, { CSSStyles: { 'margin-top': '30px' } });
this.flexModel.addItem(this.startText, { CSSStyles: { 'margin': 'auto' } });
this.flexModel.setLayout({
flexFlow: 'column',
height: '100%'
@@ -151,7 +162,6 @@ export class SchemaCompareResult {
public start(): void {
this.editor.openEditor();
this.execute();
}
private async execute(): Promise<void> {
@@ -202,6 +212,7 @@ export class SchemaCompareResult {
});
this.flexModel.removeItem(this.loader);
this.flexModel.removeItem(this.waitText);
this.switchButton.enabled = true;
this.compareButton.enabled = true;
this.optionsButton.enabled = true;
@@ -267,10 +278,12 @@ export class SchemaCompareResult {
return script;
}
private reExecute(): void {
private startCompare(): void {
this.flexModel.removeItem(this.splitView);
this.flexModel.removeItem(this.noDifferencesLabel);
this.flexModel.removeItem(this.startText);
this.flexModel.addItem(this.loader, { CSSStyles: { 'margin-top': '30px' } });
this.flexModel.addItem(this.waitText, { CSSStyles: { 'margin-top': '30px', 'align-self': 'center' } });
this.diffEditor.updateProperties({
contentLeft: os.EOL,
contentRight: os.EOL,
@@ -278,7 +291,7 @@ export class SchemaCompareResult {
});
this.differencesTable.selectedRows = null;
this.resetButtons();
this.resetButtons(false);
this.execute();
}
@@ -293,7 +306,7 @@ export class SchemaCompareResult {
}).component();
this.compareButton.onDidClick(async (click) => {
this.reExecute();
this.startCompare();
});
}
@@ -376,10 +389,17 @@ export class SchemaCompareResult {
});
}
private resetButtons(): void {
this.compareButton.enabled = false;
this.optionsButton.enabled = false;
this.switchButton.enabled = false;
private resetButtons(beforeCompareStart: boolean): void {
if (beforeCompareStart) {
this.compareButton.enabled = true;
this.optionsButton.enabled = true;
this.switchButton.enabled = true;
}
else {
this.compareButton.enabled = false;
this.optionsButton.enabled = false;
this.switchButton.enabled = false;
}
this.generateScriptButton.enabled = false;
this.applyButton.enabled = false;
this.generateScriptButton.title = localize('schemaCompare.generateScriptEnabledButton', 'Generate script to deploy changes to target');
@@ -421,7 +441,7 @@ export class SchemaCompareResult {
]
});
this.reExecute();
this.startCompare();
});
}

View File

@@ -34,7 +34,7 @@
"gettingStartedUrl": "https://go.microsoft.com/fwlink/?linkid=862039",
"releaseNotesUrl": "https://go.microsoft.com/fwlink/?linkid=875578",
"documentationUrl": "https://go.microsoft.com/fwlink/?linkid=862277",
"vscodeVersion": "1.31.1",
"vscodeVersion": "1.33.1",
"commit": "9ca6200018fc206d67a47229f991901a8a453781",
"date": "2017-12-15T12:00:00.000Z",
"recommendedExtensions": [
@@ -47,6 +47,7 @@
"Microsoft.import",
"Microsoft.powershell",
"Microsoft.profiler",
"Microsoft.schema-compare",
"Microsoft.sql-vnext",
"Redgate.sql-search",
"IDERA.sqldm-performance-insights"

View File

@@ -28,6 +28,7 @@ export class HeaderFilter {
private cancelButton: Button;
private workingFilters: any;
private columnDef: any;
private buttonStyles: IButtonStyles;
constructor(options: any) {
this.options = mixin(options, this.defaults, false);
@@ -220,6 +221,8 @@ export class HeaderFilter {
const cancelElement = jQuery('#filter-cancel-button');
cancelElement.bind('click', () => this.hideMenu());
this.applyStyles();
jQuery(':checkbox', $filter).bind('click', (e) => {
this.workingFilters = this.changeWorkingFilter(filterItems, this.workingFilters, jQuery(e.target));
});
@@ -237,9 +240,25 @@ export class HeaderFilter {
}
public style(styles: IButtonStyles): void {
this.okButton.style(styles);
this.clearButton.style(styles);
this.cancelButton.style(styles);
this.buttonStyles = styles;
this.applyStyles();
}
private applyStyles() {
if (this.buttonStyles) {
const styles = this.buttonStyles;
if (this.okButton) {
this.okButton.style(styles);
}
if (this.clearButton) {
this.clearButton.style(styles);
}
if (this.cancelButton) {
this.cancelButton.style(styles);
}
}
}
private columnsResized() {

View File

@@ -176,10 +176,12 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On
this.overrideCellFn = (rowNumber, columnId, value?, data?): string => {
let returnVal = '';
// replace the line breaks with space since the edit text control cannot
// render line breaks and strips them, updating the value.
if (Services.DBCellValue.isDBCellValue(value)) {
returnVal = value.displayValue;
returnVal = this.spacefyLinebreaks(value.displayValue);
} else if (typeof value === 'string') {
returnVal = value;
returnVal = this.spacefyLinebreaks(value);
}
return returnVal;
};
@@ -405,6 +407,13 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On
this.refreshGrid();
}
/**
* Replace the line breaks with space.
*/
private spacefyLinebreaks(inputStr: string): string {
return inputStr.replace(/(\r\n|\n|\r)/g, ' ');
}
private refreshGrid(): Thenable<void> {
return new Promise<void>((resolve, reject) => {
const self = this;

View File

@@ -259,6 +259,8 @@ table.step-list tr.step-row td {
jobhistory-component {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
}
jobhistory-component > .jobhistory-heading-container {

View File

@@ -15,12 +15,6 @@ jobsview-component {
display: block;
}
jobhistory-component {
height: 100%;
width : 100%;
display: block;
}
.job-heading-container {
height: 50px;
border-bottom: 3px solid #f4f4f4;

View File

@@ -306,7 +306,7 @@ export class CodeComponent extends AngularDisposable implements OnInit, OnChange
private setFocusAndScroll(): void {
if (this.cellModel.id === this._activeCellId) {
this._editor.focus();
this._editor.getContainer().scrollIntoView();
this._editor.getContainer().scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
}

View File

@@ -287,7 +287,7 @@ export class TextCellComponent extends CellView implements OnInit, AfterContentI
this.toggleEditMode(this.isActive());
if (this.output && this.output.nativeElement) {
(<HTMLElement>this.output.nativeElement).scrollTo();
(<HTMLElement>this.output.nativeElement).scrollTo({ behavior: 'smooth' });
}
}

View File

@@ -141,7 +141,11 @@ export class ProfilerTableEditor extends BaseEditor implements IProfilerControll
this._findCountChangeListener = input.data.onFindCountChange(() => this._updateFinderMatchState());
this._profilerTable.setData(input.data);
this._profilerTable.columns = input.columns;
this._profilerTable.columns = input.columns.map(c => {
c.formatter = textFormatter;
return c;
});
this._profilerTable.autosizeColumns();
this._input.data.currentFindPosition.then(val => {
this._profilerTable.setActiveCell(val.row, val.col);

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.cls-1{fill:#d02e00;}</style></defs><title>globalerror_red</title><path class="cls-1" d="M8,0a7.92,7.92,0,0,1,4,1.09A8.15,8.15,0,0,1,14.91,4a8,8,0,0,1,.81,1.91,8,8,0,0,1-.81,6.16A8.15,8.15,0,0,1,12,14.92a8,8,0,0,1-8.07,0,8.15,8.15,0,0,1-2.87-2.87A8,8,0,0,1,1.09,4,8.15,8.15,0,0,1,4,1.11,7.92,7.92,0,0,1,8,0ZM8,15a6.88,6.88,0,0,0,1.86-.25,7,7,0,0,0,4.89-4.89,7.07,7.07,0,0,0,0-3.73A7,7,0,0,0,9.86,1.27a7.07,7.07,0,0,0-3.73,0A7,7,0,0,0,1.25,6.15a7.07,7.07,0,0,0,0,3.73,7,7,0,0,0,4.89,4.89A6.88,6.88,0,0,0,8,15Zm3.46-9.76L8.71,8l2.75,2.76-.7.7L8,8.73,5.24,11.48l-.7-.7L7.29,8,4.54,5.26l.7-.7L8,7.31l2.76-2.75Z"/></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -45,7 +45,7 @@
display: inline-block;
}
.monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.not-started {
.vs .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.not-started {
background-image: url('status_queuedtask.svg');
}
@@ -63,14 +63,14 @@
background-image: url("loading_inverse.svg");
}
.vs .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success,
.vs-dark .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success,
.hc-black .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success {
.monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success {
background-image: url("status_success.svg");
}
.vs .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled,
.vs-dark .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled,
.hc-black .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled {
.monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled {
background-image: url("status_cancelled.svg");
}
.monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.error {
background-image: url("error.svg");
}

View File

@@ -47,6 +47,7 @@
.extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .title {
font-size: 15px;
line-height: 1.4em;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
@@ -56,6 +57,7 @@
.extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .description {
font-size: 13px;
line-height: 1.4em;
overflow: hidden;
white-space: pre-wrap;
text-overflow: ellipsis;
@@ -63,6 +65,7 @@
.extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .publisher {
font-size: 90%;
line-height: 1.4em;
padding-right: 6px;
opacity: .6;
font-weight: 600;
@@ -71,4 +74,4 @@
.no-extensionTab-label {
font-size: 12px;
padding: 15px;
}
}

View File

@@ -29,13 +29,10 @@ import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/la
class ExtensionListDelegate implements IListVirtualDelegate<IDashboardUITab> {
constructor(
private _height: number
) {
}
private static readonly HEIGHT = 101;
public getHeight(element: IDashboardUITab): number {
return this._height;
return ExtensionListDelegate.HEIGHT;
}
public getTemplateId(element: IDashboardUITab): string {
@@ -91,7 +88,6 @@ class ExtensionListRenderer implements IListRenderer<IDashboardUITab, ExtensionL
}
export class NewDashboardTabDialog extends Modal {
public static EXTENSIONLIST_HEIGHT = 101;
// MEMBER letIABLES ////////////////////////////////////////////////////
private _addNewTabButton: Button;
@@ -165,7 +161,7 @@ export class NewDashboardTabDialog extends Modal {
private createExtensionList(container: HTMLElement) {
// Create a fixed list view for the extensions
let extensionTabViewContainer = DOM.$('.extensionTab-view');
let delegate = new ExtensionListDelegate(NewDashboardTabDialog.EXTENSIONLIST_HEIGHT);
let delegate = new ExtensionListDelegate();
let extensionTabRenderer = new ExtensionListRenderer();
this._extensionList = new List<IDashboardUITab>(extensionTabViewContainer, delegate, [extensionTabRenderer]);