Layer grid code (#5029)

* layer grid

* errors; edit data still not showing up

* fix edit data

* fix tab spaces
This commit is contained in:
Anthony Dresser
2019-04-16 13:30:15 -07:00
committed by GitHub
parent b376f36733
commit 5c10127758
63 changed files with 128 additions and 415 deletions

View File

@@ -107,10 +107,8 @@ const vscodeResources = [
'out-build/sql/workbench/parts/dashboard/**/*.html', 'out-build/sql/workbench/parts/dashboard/**/*.html',
'out-build/sql/parts/disasterRecovery/**/*.html', 'out-build/sql/parts/disasterRecovery/**/*.html',
'out-build/sql/parts/common/modal/media/**', 'out-build/sql/parts/common/modal/media/**',
'out-build/sql/parts/grid/load/lib/**', 'out-build/sql/workbench/parts/grid/media/**',
'out-build/sql/parts/grid/load/loadJquery.js', 'out-build/sql/workbench/parts/grid/views/**/*.html',
'out-build/sql/parts/grid/media/**',
'out-build/sql/parts/grid/views/**/*.html',
'out-build/sql/parts/tasks/**/*.html', 'out-build/sql/parts/tasks/**/*.html',
'out-build/sql/parts/taskHistory/viewlet/media/**', 'out-build/sql/parts/taskHistory/viewlet/media/**',
'out-build/sql/parts/jobManagement/common/media/*.svg', 'out-build/sql/parts/jobManagement/common/media/*.svg',

View File

@@ -20,7 +20,6 @@ classes should alter those!
.slick-header-column.ui-state-default { .slick-header-column.ui-state-default {
position: relative; position: relative;
display: inline-block;
/*box-sizing: content-box !important; use this for Firefox! */ /*box-sizing: content-box !important; use this for Firefox! */
overflow: hidden; overflow: hidden;
-o-text-overflow: ellipsis; -o-text-overflow: ellipsis;
@@ -47,7 +46,6 @@ classes should alter those!
} }
.slick-sort-indicator { .slick-sort-indicator {
display: inline-block;
width: 8px; width: 8px;
height: 5px; height: 5px;
margin-left: 4px; margin-left: 4px;
@@ -116,9 +114,6 @@ classes should alter those!
border-top-color: silver; border-top-color: silver;
} }
.slick-group {
}
.slick-group-toggle { .slick-group-toggle {
display: inline-block; display: inline-block;
} }

View File

@@ -4,6 +4,10 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./media/table'; import 'vs/css!./media/table';
import 'vs/css!./media/slick.grid';
import 'vs/css!./media/slickColorTheme';
import 'vs/css!./media/slickGrid';
import { TableDataView } from './tableDataView'; import { TableDataView } from './tableDataView';
import { IDisposableDataProvider, ITableSorter, ITableMouseEvent, ITableConfiguration, ITableStyles } from 'sql/base/browser/ui/table/interfaces'; import { IDisposableDataProvider, ITableSorter, ITableMouseEvent, ITableConfiguration, ITableStyles } from 'sql/base/browser/ui/table/interfaces';

View File

@@ -18,8 +18,8 @@ import { IQueryModelService } from 'sql/platform/query/common/queryModel';
import { bootstrapAngular } from 'sql/platform/bootstrap/node/bootstrapService'; import { bootstrapAngular } from 'sql/platform/bootstrap/node/bootstrapService';
import { BareResultsGridInfo } from 'sql/parts/query/editor/queryResultsEditor'; import { BareResultsGridInfo } from 'sql/parts/query/editor/queryResultsEditor';
import { IEditDataComponentParams } from 'sql/platform/bootstrap/node/bootstrapParams'; import { IEditDataComponentParams } from 'sql/platform/bootstrap/node/bootstrapParams';
import { EditDataModule } from 'sql/parts/grid/views/editData/editData.module'; import { EditDataModule } from 'sql/workbench/parts/grid/views/editData/editData.module';
import { EDITDATA_SELECTOR } from 'sql/parts/grid/views/editData/editData.component'; import { EDITDATA_SELECTOR } from 'sql/workbench/parts/grid/views/editData/editData.component';
import { EditDataResultsInput } from 'sql/parts/editData/common/editDataResultsInput'; import { EditDataResultsInput } from 'sql/parts/editData/common/editDataResultsInput';
import { CancellationToken } from 'vs/base/common/cancellation'; import { CancellationToken } from 'vs/base/common/cancellation';
import { IStorageService } from 'vs/platform/storage/common/storage'; import { IStorageService } from 'vs/platform/storage/common/storage';

View File

@@ -1,23 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
export let ResizeContents = 'ResizeContents';
export let RefreshContents = 'RefreshContents';
export let ToggleResultPane = 'ToggleResultPane';
export let ToggleMessagePane = 'ToggleMessagePane';
export let CopySelection = 'CopySelection';
export let CopyWithHeaders = 'CopyWithHeaders';
export let CopyMessagesSelection = 'CopyMessagesSelection';
export let SelectAll = 'SelectAll';
export let SelectAllMessages = 'SelectAllMessages';
export let SaveAsCsv = 'SaveAsCSV';
export let SaveAsJSON = 'SaveAsJSON';
export let SaveAsExcel = 'SaveAsExcel';
export let SaveAsXML = 'SaveAsXML';
export let ViewAsChart = 'ViewAsChart';
export let GoToNextQueryOutputTab = 'GoToNextQueryOutputTab';
export let GoToNextGrid = 'GoToNextGrid';

View File

@@ -1,2 +0,0 @@
const jQuery = require('jquery');
const $ = jQuery;

View File

@@ -3,14 +3,10 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/parts/grid/media/slickColorTheme'; import 'vs/css!sql/workbench/parts/grid/media/flexbox';
import 'vs/css!sql/parts/grid/media/flexbox'; import 'vs/css!sql/workbench/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slick.grid';
import 'vs/css!sql/parts/grid/media/slickGrid';
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import 'vs/css!sql/media/icons/common-icons'; import 'vs/css!sql/media/icons/common-icons';
import 'vs/css!sql/base/browser/ui/table/media/table';
import * as dom from 'vs/base/browser/dom'; import * as dom from 'vs/base/browser/dom';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -3,14 +3,10 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/parts/grid/media/slickColorTheme'; import 'vs/css!sql/workbench/parts/grid/media/flexbox';
import 'vs/css!sql/parts/grid/media/flexbox'; import 'vs/css!sql/workbench/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slick.grid';
import 'vs/css!sql/parts/grid/media/slickGrid';
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import 'vs/css!sql/media/icons/common-icons'; import 'vs/css!sql/media/icons/common-icons';
import 'vs/css!sql/base/browser/ui/table/media/table';
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -3,14 +3,10 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/parts/grid/media/slickColorTheme'; import 'vs/css!sql/workbench/parts/grid/media/flexbox';
import 'vs/css!sql/parts/grid/media/flexbox'; import 'vs/css!sql/workbench/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slick.grid';
import 'vs/css!sql/parts/grid/media/slickGrid';
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import 'vs/css!sql/media/icons/common-icons'; import 'vs/css!sql/media/icons/common-icons';
import 'vs/css!sql/base/browser/ui/table/media/table';
import * as dom from 'vs/base/browser/dom'; import * as dom from 'vs/base/browser/dom';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -3,14 +3,10 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/parts/grid/media/slickColorTheme'; import 'vs/css!sql/workbench/parts/grid/media/flexbox';
import 'vs/css!sql/parts/grid/media/flexbox'; import 'vs/css!sql/workbench/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slick.grid';
import 'vs/css!sql/parts/grid/media/slickGrid';
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import 'vs/css!sql/media/icons/common-icons'; import 'vs/css!sql/media/icons/common-icons';
import 'vs/css!sql/base/browser/ui/table/media/table';
import * as dom from 'vs/base/browser/dom'; import * as dom from 'vs/base/browser/dom';
import * as azdata from 'azdata'; import * as azdata from 'azdata';

View File

@@ -25,10 +25,10 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { Dimension } from 'vs/base/browser/dom'; import { Dimension } from 'vs/base/browser/dom';
import { textFormatter, slickGridDataItemColumnValueExtractor } from 'sql/parts/grid/services/sharedServices'; import { textFormatter, slickGridDataItemColumnValueExtractor } from 'sql/base/browser/ui/table/formatters';
import { PROFILER_MAX_MATCHES } from 'sql/parts/profiler/editor/controller/profilerFindWidget'; import { PROFILER_MAX_MATCHES } from 'sql/parts/profiler/editor/controller/profilerFindWidget';
import { IStorageService } from 'vs/platform/storage/common/storage'; import { IStorageService } from 'vs/platform/storage/common/storage';
import { IStatusbarService, StatusbarAlignment, IStatusbarEntry } from 'vs/platform/statusbar/common/statusbar'; import { IStatusbarService, StatusbarAlignment } from 'vs/platform/statusbar/common/statusbar';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
export interface ProfilerTableViewState { export interface ProfilerTableViewState {

View File

@@ -15,7 +15,7 @@ import { ProfilerTableEditor, ProfilerTableViewState } from './controller/profil
import * as Actions from 'sql/parts/profiler/contrib/profilerActions'; import * as Actions from 'sql/parts/profiler/contrib/profilerActions';
import { CONTEXT_PROFILER_EDITOR, PROFILER_TABLE_COMMAND_SEARCH } from './interfaces'; import { CONTEXT_PROFILER_EDITOR, PROFILER_TABLE_COMMAND_SEARCH } from './interfaces';
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox'; import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
import { textFormatter, slickGridDataItemColumnValueExtractor } from 'sql/parts/grid/services/sharedServices'; import { textFormatter, slickGridDataItemColumnValueExtractor } from 'sql/base/browser/ui/table/formatters';
import { ProfilerResourceEditor } from './profilerResourceEditor'; import { ProfilerResourceEditor } from './profilerResourceEditor';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { ITextModel } from 'vs/editor/common/model'; import { ITextModel } from 'vs/editor/common/model';

View File

@@ -3,7 +3,6 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict';
import 'vs/css!sql/media/overwriteVsIcons'; import 'vs/css!sql/media/overwriteVsIcons';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { EditorDescriptor, IEditorRegistry, Extensions as EditorExtensions } from 'vs/workbench/browser/editor'; import { EditorDescriptor, IEditorRegistry, Extensions as EditorExtensions } from 'vs/workbench/browser/editor';
@@ -28,8 +27,8 @@ import {
RunQueryKeyboardAction, RunCurrentQueryKeyboardAction, CancelQueryKeyboardAction, RefreshIntellisenseKeyboardAction, ToggleQueryResultsKeyboardAction, RunQueryKeyboardAction, RunCurrentQueryKeyboardAction, CancelQueryKeyboardAction, RefreshIntellisenseKeyboardAction, ToggleQueryResultsKeyboardAction,
RunQueryShortcutAction, RunCurrentQueryWithActualPlanKeyboardAction, FocusOnCurrentQueryKeyboardAction, ParseSyntaxAction RunQueryShortcutAction, RunCurrentQueryWithActualPlanKeyboardAction, FocusOnCurrentQueryKeyboardAction, ParseSyntaxAction
} from 'sql/parts/query/execution/keyboardQueryActions'; } from 'sql/parts/query/execution/keyboardQueryActions';
import * as gridActions from 'sql/parts/grid/views/gridActions'; import * as gridActions from 'sql/workbench/parts/grid/views/gridActions';
import * as gridCommands from 'sql/parts/grid/views/gridCommands'; import * as gridCommands from 'sql/workbench/parts/grid/views/gridCommands';
import { QueryPlanEditor } from 'sql/parts/queryPlan/queryPlanEditor'; import { QueryPlanEditor } from 'sql/parts/queryPlan/queryPlanEditor';
import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput'; import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput';
import * as Constants from 'sql/parts/query/common/constants'; import * as Constants from 'sql/parts/query/common/constants';

View File

@@ -13,7 +13,7 @@ import { ITree } from 'vs/base/parts/tree/browser/tree';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import QueryRunner from 'sql/platform/query/common/queryRunner'; import QueryRunner from 'sql/platform/query/common/queryRunner';
import { SaveFormat } from 'sql/parts/grid/common/interfaces'; import { SaveFormat } from 'sql/workbench/parts/grid/common/interfaces';
import { Table } from 'sql/base/browser/ui/table/table'; import { Table } from 'sql/base/browser/ui/table/table';
import { GridTableState } from 'sql/parts/query/editor/gridPanel'; import { GridTableState } from 'sql/parts/query/editor/gridPanel';
import { QueryEditor } from './queryEditor'; import { QueryEditor } from './queryEditor';

View File

@@ -12,12 +12,12 @@ import { Table } from 'sql/base/browser/ui/table/table';
import { ScrollableSplitView, IView } from 'sql/base/browser/ui/scrollableSplitview/scrollableSplitview'; import { ScrollableSplitView, IView } from 'sql/base/browser/ui/scrollableSplitview/scrollableSplitview';
import { MouseWheelSupport } from 'sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin'; import { MouseWheelSupport } from 'sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin';
import { AutoColumnSize } from 'sql/base/browser/ui/table/plugins/autoSizeColumns.plugin'; import { AutoColumnSize } from 'sql/base/browser/ui/table/plugins/autoSizeColumns.plugin';
import { SaveFormat } from 'sql/parts/grid/common/interfaces'; import { SaveFormat } from 'sql/workbench/parts/grid/common/interfaces';
import { IGridActionContext, SaveResultAction, CopyResultAction, SelectAllGridAction, MaximizeTableAction, RestoreTableAction, ChartDataAction } from 'sql/parts/query/editor/actions'; import { IGridActionContext, SaveResultAction, CopyResultAction, SelectAllGridAction, MaximizeTableAction, RestoreTableAction, ChartDataAction } from 'sql/parts/query/editor/actions';
import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin'; import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin';
import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin'; import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin';
import { escape } from 'sql/base/common/strings'; import { escape } from 'sql/base/common/strings';
import { hyperLinkFormatter, textFormatter } from 'sql/parts/grid/services/sharedServices'; import { hyperLinkFormatter, textFormatter } from 'sql/base/browser/ui/table/formatters';
import { CopyKeybind } from 'sql/base/browser/ui/table/plugins/copyKeybind.plugin'; import { CopyKeybind } from 'sql/base/browser/ui/table/plugins/copyKeybind.plugin';
import { AdditionalKeyBindings } from 'sql/base/browser/ui/table/plugins/additionalKeyBindings.plugin'; import { AdditionalKeyBindings } from 'sql/base/browser/ui/table/plugins/additionalKeyBindings.plugin';
import { ITableStyles, ITableMouseEvent } from 'sql/base/browser/ui/table/interfaces'; import { ITableStyles, ITableMouseEvent } from 'sql/base/browser/ui/table/interfaces';

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
export class RunTimeInformation { class RunTimeInformation {
runtimePerThreads: RuntimePerThread[]; runtimePerThreads: RuntimePerThread[];
public get actualRows(): number { public get actualRows(): number {
let total = 0; let total = 0;
@@ -27,14 +27,14 @@ export class RunTimeInformation {
} }
} }
export class RuntimePerThread { class RuntimePerThread {
threadId: number; threadId: number;
actualRow: number; actualRow: number;
actualExecutionMode: string; actualExecutionMode: string;
actualExecutions: number; actualExecutions: number;
} }
export class IndexObject { class IndexObject {
database: string; database: string;
schema: string; schema: string;
table: string; table: string;
@@ -53,7 +53,7 @@ export class IndexObject {
} }
} }
export class PlanNode { class PlanNode {
root: PlanNode; root: PlanNode;
subtreeCost: number; subtreeCost: number;
private childrenNodes: PlanNode[]; private childrenNodes: PlanNode[];

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/parts/grid/load/css/qp'; import 'vs/css!./media/qp';
import { ElementRef, Component, Inject, forwardRef, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { ElementRef, Component, Inject, forwardRef, OnDestroy, OnInit, ViewChild } from '@angular/core';
import * as QP from 'html-query-plan'; import * as QP from 'html-query-plan';

View File

@@ -1,123 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { ElementRef, Component, Inject, forwardRef, OnDestroy, Input, OnInit } from '@angular/core';
import { Subscription, Subject } from 'rxjs/Rx';
import { PlanXmlParser, PlanNode } from 'sql/parts/queryPlan/planXmlParser';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { Table } from 'sql/base/browser/ui/table/table';
import { attachTableStyler } from 'sql/platform/theme/common/styler';
import { IQueryComponentParams } from 'sql/platform/bootstrap/node/bootstrapParams';
import * as GridContentEvents from 'sql/parts/grid/common/gridContentEvents';
import { DataService } from 'sql/parts/grid/services/dataService';
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
import { localize } from 'vs/nls';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
export const TOP_OPERATIONS_SELECTOR: string = 'top-operations-component';
@Component({
selector: TOP_OPERATIONS_SELECTOR,
template: '',
providers: [{ provide: TabChild, useExisting: forwardRef(() => TopOperationsComponent) }]
})
export class TopOperationsComponent extends TabChild implements OnDestroy, OnInit {
private _operations: Array<PlanNode> = [];
private _table: Table<any>;
private _dataService: DataService;
private _columns: Array<Slick.Column<any>> = [
{ name: localize('topOperations.operation', 'Operation'), field: 'operation' },
{ name: localize('topOperations.object', 'Object'), field: 'object' },
{ name: localize('topOperations.estCost', 'Est Cost'), field: 'estCost' },
{ name: localize('topOperations.estSubtreeCost', 'Est Subtree Cost'), field: 'estSubtreeCost' },
{ name: localize('topOperations.actualRows', 'Actual Rows'), field: 'actualRows' },
{ name: localize('topOperations.estRows', 'Est Rows'), field: 'estRows' },
{ name: localize('topOperations.actualExecutions', 'Actual Executions'), field: 'actualExecutions' },
{ name: localize('topOperations.estCPUCost', 'Est CPU Cost'), field: 'estCPUCost' },
{ name: localize('topOperations.estIOCost', 'Est IO Cost'), field: 'estIOCost' },
{ name: localize('topOperations.parallel', 'Parallel'), field: 'parallel' },
{ name: localize('topOperations.actualRebinds', 'Actual Rebinds'), field: 'actualRebinds' },
{ name: localize('topOperations.estRebinds', 'Est Rebinds'), field: 'estRebinds' },
{ name: localize('topOperations.actualRewinds', 'Actual Rewinds'), field: 'actualRewinds' },
{ name: localize('topOperations.estRewinds', 'Est Rewinds'), field: 'estRewinds' },
{ name: localize('topOperations.partitioned', 'Partitioned'), field: 'partitioned' }
];
@Input() public queryParameters: IQueryComponentParams;
private _disposables: Array<IDisposable> = [];
constructor(
@Inject(forwardRef(() => ElementRef)) private _el: ElementRef,
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService
) {
super();
}
ngOnInit() {
this._dataService = this.queryParameters.dataService;
this.subscribeWithDispose(this._dataService.gridContentObserver, (type) => {
switch (type) {
case GridContentEvents.ResizeContents:
this.layout();
break;
}
});
}
ngOnDestroy() {
dispose(this._disposables);
}
public set planXml(val: string) {
let parser: PlanXmlParser = new PlanXmlParser(val);
this._operations = parser.topOperations;
let data = this._operations.map(i => {
return {
operation: i.title,
object: i.indexObject.title,
estCost: i.estimatedOperatorCost,
estSubtreeCost: i.subtreeCost,
actualRows: i.runtimeInfo.actualRows,
estRows: i.estimateRows,
actualExecutions: i.runtimeInfo.actualExecutions,
estCPUCost: i.estimateCpu,
estIOCost: i.estimateIo,
parallel: i.parallel,
actualRebinds: '',
estRebinds: i.estimateRebinds,
actualRewinds: '',
estRewinds: i.estimateRewinds,
partitioned: i.partitioned
};
});
if (!this._table) {
let columns = this._columns.map((column) => {
column.rerenderOnResize = true;
return column;
});
this._table = new Table(this._el.nativeElement, { dataProvider: data, columns });
this._disposables.push(attachTableStyler(this._table, this.themeService));
}
}
public layout(): void {
if (this._table) {
setTimeout(() => {
this._table.resizeCanvas();
this._table.autosizeColumns();
});
}
}
protected subscribeWithDispose<T>(subject: Subject<T>, event: (value: any) => void): void {
let sub: Subscription = subject.subscribe(event);
this.toDispose.push(toDisposableSubscription(sub));
}
}

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { DataService } from 'sql/parts/grid/services/dataService'; import { DataService } from 'sql/workbench/parts/grid/services/dataService';
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces'; import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { ConnectionContextKey } from 'sql/workbench/parts/connection/common/connectionContextKey'; import { ConnectionContextKey } from 'sql/workbench/parts/connection/common/connectionContextKey';

View File

@@ -9,7 +9,7 @@ import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants';
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils'; import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
import { SaveResultsRequestParams } from 'azdata'; import { SaveResultsRequestParams } from 'azdata';
import { IQueryManagementService } from 'sql/platform/query/common/queryManagement'; import { IQueryManagementService } from 'sql/platform/query/common/queryManagement';
import { ISaveRequest, SaveFormat } from 'sql/parts/grid/common/interfaces'; import { ISaveRequest, SaveFormat } from 'sql/workbench/parts/grid/common/interfaces';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import QueryRunner from 'sql/platform/query/common/queryRunner'; import QueryRunner from 'sql/platform/query/common/queryRunner';
import { DataService } from 'sql/parts/grid/services/dataService'; import { DataService } from 'sql/workbench/parts/grid/services/dataService';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { Event } from 'vs/base/common/event'; import { Event } from 'vs/base/common/event';
import { QueryInput } from 'sql/parts/query/common/queryInput'; import { QueryInput } from 'sql/parts/query/common/queryInput';

View File

@@ -5,11 +5,11 @@
'use strict'; 'use strict';
import * as GridContentEvents from 'sql/parts/grid/common/gridContentEvents'; import * as GridContentEvents from 'sql/workbench/parts/grid/common/gridContentEvents';
import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants'; import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants';
import QueryRunner, { EventType as QREvents } from 'sql/platform/query/common/queryRunner'; import QueryRunner, { EventType as QREvents } from 'sql/platform/query/common/queryRunner';
import { DataService } from 'sql/parts/grid/services/dataService'; import { DataService } from 'sql/workbench/parts/grid/services/dataService';
import { IQueryModelService, IQueryPlanInfo, IQueryEvent } from 'sql/platform/query/common/queryModel'; import { IQueryModelService, IQueryEvent } from 'sql/platform/query/common/queryModel';
import { QueryInput } from 'sql/parts/query/common/queryInput'; import { QueryInput } from 'sql/parts/query/common/queryInput';
import { QueryStatusbarItem } from 'sql/parts/query/execution/queryStatus'; import { QueryStatusbarItem } from 'sql/parts/query/execution/queryStatus';
import { SqlFlavorStatusbarItem } from 'sql/parts/query/common/flavorStatus'; import { SqlFlavorStatusbarItem } from 'sql/parts/query/common/flavorStatus';

View File

@@ -3,15 +3,13 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict';
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import * as Constants from 'sql/parts/query/common/constants'; import * as Constants from 'sql/parts/query/common/constants';
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils'; import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
import { IQueryManagementService } from 'sql/platform/query/common/queryManagement'; import { IQueryManagementService } from 'sql/platform/query/common/queryManagement';
import * as Utils from 'sql/platform/connection/common/utils'; import * as Utils from 'sql/platform/connection/common/utils';
import { SaveFormat } from 'sql/parts/grid/common/interfaces'; import { SaveFormat } from 'sql/workbench/parts/grid/common/interfaces';
import { Deferred } from 'sql/base/common/promise'; import { Deferred } from 'sql/base/common/promise';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';

View File

@@ -0,0 +1,21 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
export const ResizeContents = 'ResizeContents';
export const RefreshContents = 'RefreshContents';
export const ToggleResultPane = 'ToggleResultPane';
export const ToggleMessagePane = 'ToggleMessagePane';
export const CopySelection = 'CopySelection';
export const CopyWithHeaders = 'CopyWithHeaders';
export const CopyMessagesSelection = 'CopyMessagesSelection';
export const SelectAll = 'SelectAll';
export const SelectAllMessages = 'SelectAllMessages';
export const SaveAsCsv = 'SaveAsCSV';
export const SaveAsJSON = 'SaveAsJSON';
export const SaveAsExcel = 'SaveAsExcel';
export const SaveAsXML = 'SaveAsXML';
export const ViewAsChart = 'ViewAsChart';
export const GoToNextQueryOutputTab = 'GoToNextQueryOutputTab';
export const GoToNextGrid = 'GoToNextGrid';

View File

@@ -6,33 +6,6 @@
import { ISlickColumn, VirtualizedCollection } from 'angular2-slickgrid'; import { ISlickColumn, VirtualizedCollection } from 'angular2-slickgrid';
export interface IGridIcon {
showCondition: () => boolean;
icon: () => string;
hoverText: () => string;
functionality: (batchId: number, resultId: number, index: number) => void;
}
export interface IMessageLink {
uri: string;
text: string;
}
export interface IMessage {
batchId?: number;
time: string;
message: string;
isError: boolean;
link?: IMessageLink;
}
export interface IGridIcon {
showCondition: () => boolean;
icon: () => string;
hoverText: () => string;
functionality: (batchId: number, resultId: number, index: number) => void;
}
export interface IGridDataSet { export interface IGridDataSet {
dataRows: VirtualizedCollection<{}>; dataRows: VirtualizedCollection<{}>;
columnDefinitions: ISlickColumn<any>[]; columnDefinitions: ISlickColumn<any>[];

View File

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 142 B

View File

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 142 B

View File

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 633 B

View File

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 633 B

View File

Before

Width:  |  Height:  |  Size: 665 B

After

Width:  |  Height:  |  Size: 665 B

View File

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

View File

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 940 B

View File

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 940 B

View File

Before

Width:  |  Height:  |  Size: 1022 B

After

Width:  |  Height:  |  Size: 1022 B

View File

Before

Width:  |  Height:  |  Size: 1022 B

After

Width:  |  Height:  |  Size: 1022 B

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 877 B

After

Width:  |  Height:  |  Size: 877 B

View File

Before

Width:  |  Height:  |  Size: 884 B

After

Width:  |  Height:  |  Size: 884 B

View File

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 127 B

View File

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 127 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -3,19 +3,16 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject'; import { Subject } from 'rxjs/Subject';
import { Observer } from 'rxjs/Observer'; import { Observer } from 'rxjs/Observer';
import { ResultSetSubset, EditUpdateCellResult, EditSubsetResult, EditCreateRowResult } from 'azdata'; import { EditUpdateCellResult, EditSubsetResult, EditCreateRowResult } from 'azdata';
import { IQueryModelService } from 'sql/platform/query/common/queryModel'; import { IQueryModelService } from 'sql/platform/query/common/queryModel';
import { ResultSerializer } from 'sql/platform/node/resultSerializer'; import { ResultSerializer } from 'sql/platform/node/resultSerializer';
import { ISaveRequest } from 'sql/parts/grid/common/interfaces'; import { ISaveRequest } from 'sql/workbench/parts/grid/common/interfaces';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
/** /**
* DataService handles the interactions between QueryModel and app.component. Thus, it handles * DataService handles the interactions between QueryModel and app.component. Thus, it handles
@@ -30,31 +27,13 @@ export class DataService {
constructor( constructor(
private _uri: string, private _uri: string,
@IInstantiationService private _instantiationService: IInstantiationService, @IInstantiationService private _instantiationService: IInstantiationService,
@IQueryModelService private _queryModel: IQueryModelService, @IQueryModelService private _queryModel: IQueryModelService
@IQueryEditorService private _queryEditorService: IQueryEditorService
) { ) {
this.queryEventObserver = new Subject(); this.queryEventObserver = new Subject();
this.gridContentObserver = new Subject(); this.gridContentObserver = new Subject();
this.editQueue = Promise.resolve(); this.editQueue = Promise.resolve();
} }
/**
* Get a specified number of rows starting at a specified row for
* the current results set. Used for query results only.
* @param start The starting row or the requested rows
* @param numberOfRows The amount of rows to return
* @param batchId The batch id of the batch you are querying
* @param resultId The id of the result you want to get the rows for
*/
getQueryRows(rowStart: number, numberOfRows: number, batchId: number, resultId: number): Observable<ResultSetSubset> {
const self = this;
return Observable.create(function (observer: Observer<ResultSetSubset>) {
self._queryModel.getQueryRows(self._uri, rowStart, numberOfRows, batchId, resultId).then(results => {
observer.next(results);
});
});
}
/** /**
* Get a specified number of rows starting at a specified row. Should only * Get a specified number of rows starting at a specified row. Should only
* be used for edit sessions. * be used for edit sessions.
@@ -187,23 +166,6 @@ export class DataService {
this._queryModel.copyResults(this._uri, selection, batchId, resultId, includeHeaders); this._queryModel.copyResults(this._uri, selection, batchId, resultId, includeHeaders);
} }
/**
* Sends a request to set the selection in the QueryEditor.
*/
setEditorSelection(index: number) {
this._queryModel.setEditorSelection(this._uri, index);
}
showWarning(message: string): void {
}
showError(message: string): void {
}
get config(): Promise<{ [key: string]: any }> {
return undefined;
}
onAngularLoaded(): void { onAngularLoaded(): void {
this._queryModel.onAngularLoaded(this._uri); this._queryModel.onAngularLoaded(this._uri);
} }

View File

@@ -3,25 +3,20 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; import 'vs/css!sql/workbench/parts/grid/media/flexbox';
import 'vs/css!sql/workbench/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slickColorTheme';
import 'vs/css!sql/parts/grid/media/flexbox';
import 'vs/css!sql/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slick.grid';
import 'vs/css!sql/parts/grid/media/slickGrid';
import 'vs/css!./media/editData'; import 'vs/css!./media/editData';
import { ElementRef, ChangeDetectorRef, OnInit, OnDestroy, Component, Inject, forwardRef, EventEmitter } from '@angular/core'; import { ElementRef, ChangeDetectorRef, OnInit, OnDestroy, Component, Inject, forwardRef, EventEmitter } from '@angular/core';
import { VirtualizedCollection, OnRangeRenderCompletedEventArgs } from 'angular2-slickgrid'; import { VirtualizedCollection } from 'angular2-slickgrid';
import { IGridDataSet } from 'sql/parts/grid/common/interfaces'; import { IGridDataSet } from 'sql/workbench/parts/grid/common/interfaces';
import * as Services from 'sql/parts/grid/services/sharedServices'; import * as Services from 'sql/base/browser/ui/table/formatters';
import { IEditDataComponentParams } from 'sql/platform/bootstrap/node/bootstrapParams'; import { IEditDataComponentParams } from 'sql/platform/bootstrap/node/bootstrapParams';
import { GridParentComponent } from 'sql/parts/grid/views/gridParentComponent'; import { GridParentComponent } from 'sql/workbench/parts/grid/views/gridParentComponent';
import { EditDataGridActionProvider } from 'sql/parts/grid/views/editData/editDataGridActions'; import { EditDataGridActionProvider } from 'sql/workbench/parts/grid/views/editData/editDataGridActions';
import { error } from 'sql/base/common/log'; import { error } from 'sql/base/common/log';
import { clone, mixin } from 'sql/base/common/objects'; import { clone } from 'sql/base/common/objects';
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService'; import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
import { IBootstrapParams } from 'sql/platform/bootstrap/node/bootstrapService'; import { IBootstrapParams } from 'sql/platform/bootstrap/node/bootstrapService';
import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin'; import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin';
@@ -45,9 +40,8 @@ export const EDITDATA_SELECTOR: string = 'editdata-component';
@Component({ @Component({
selector: EDITDATA_SELECTOR, selector: EDITDATA_SELECTOR,
host: { '(window:keydown)': 'keyEvent($event)', '(window:gridnav)': 'keyEvent($event)' }, host: { '(window:keydown)': 'keyEvent($event)', '(window:gridnav)': 'keyEvent($event)' },
templateUrl: decodeURI(require.toUrl('sql/parts/grid/views/editData/editData.component.html')) templateUrl: decodeURI(require.toUrl('sql/workbench/parts/grid/views/editData/editData.component.html'))
}) })
export class EditDataComponent extends GridParentComponent implements OnInit, OnDestroy { export class EditDataComponent extends GridParentComponent implements OnInit, OnDestroy {
// The time(in milliseconds) we wait before refreshing the grid. // The time(in milliseconds) we wait before refreshing the grid.
// We use clearTimeout and setTimeout pair to avoid unnecessary refreshes. // We use clearTimeout and setTimeout pair to avoid unnecessary refreshes.
@@ -96,7 +90,7 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On
@Inject(forwardRef(() => ChangeDetectorRef)) cd: ChangeDetectorRef, @Inject(forwardRef(() => ChangeDetectorRef)) cd: ChangeDetectorRef,
@Inject(IBootstrapParams) params: IEditDataComponentParams, @Inject(IBootstrapParams) params: IEditDataComponentParams,
@Inject(IInstantiationService) private instantiationService: IInstantiationService, @Inject(IInstantiationService) private instantiationService: IInstantiationService,
@Inject(INotificationService) notificationService: INotificationService, @Inject(INotificationService) private notificationService: INotificationService,
@Inject(IContextMenuService) contextMenuService: IContextMenuService, @Inject(IContextMenuService) contextMenuService: IContextMenuService,
@Inject(IKeybindingService) keybindingService: IKeybindingService, @Inject(IKeybindingService) keybindingService: IKeybindingService,
@Inject(IContextKeyService) contextKeyService: IContextKeyService, @Inject(IContextKeyService) contextKeyService: IContextKeyService,
@@ -104,7 +98,7 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On
@Inject(IClipboardService) clipboardService: IClipboardService, @Inject(IClipboardService) clipboardService: IClipboardService,
@Inject(IQueryEditorService) queryEditorService: IQueryEditorService @Inject(IQueryEditorService) queryEditorService: IQueryEditorService
) { ) {
super(el, cd, contextMenuService, keybindingService, contextKeyService, configurationService, clipboardService, queryEditorService, notificationService); super(el, cd, contextMenuService, keybindingService, contextKeyService, configurationService, clipboardService, queryEditorService);
this._el.nativeElement.className = 'slickgridContainer'; this._el.nativeElement.className = 'slickgridContainer';
this.dataService = params.dataService; this.dataService = params.dataService;
this.actionProvider = this.instantiationService.createInstance(EditDataGridActionProvider, this.dataService, this.onGridSelectAll(), this.onDeleteRow(), this.onRevertRow()); this.actionProvider = this.instantiationService.createInstance(EditDataGridActionProvider, this.dataService, this.onGridSelectAll(), this.onDeleteRow(), this.onRevertRow());

View File

@@ -9,7 +9,7 @@ import { CommonModule } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { SlickGrid } from 'angular2-slickgrid'; import { SlickGrid } from 'angular2-slickgrid';
import { EditDataComponent } from 'sql/parts/grid/views/editData/editData.component'; import { EditDataComponent } from 'sql/workbench/parts/grid/views/editData/editData.component';
import { IBootstrapParams, ISelector, providerIterator } from 'sql/platform/bootstrap/node/bootstrapService'; import { IBootstrapParams, ISelector, providerIterator } from 'sql/platform/bootstrap/node/bootstrapService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';

View File

@@ -3,14 +3,11 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; import { IGridInfo } from 'sql/workbench/parts/grid/common/interfaces';
import { DataService } from 'sql/workbench/parts/grid/services/dataService';
import { IGridInfo } from 'sql/parts/grid/common/interfaces'; import { GridActionProvider } from 'sql/workbench/parts/grid/views/gridActions';
import { DataService } from 'sql/parts/grid/services/dataService';
import { GridActionProvider } from 'sql/parts/grid/views/gridActions';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { IAction, Action } from 'vs/base/common/actions'; import { IAction, Action } from 'vs/base/common/actions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
export class EditDataGridActionProvider extends GridActionProvider { export class EditDataGridActionProvider extends GridActionProvider {
@@ -18,10 +15,9 @@ export class EditDataGridActionProvider extends GridActionProvider {
dataService: DataService, dataService: DataService,
selectAllCallback: (index: number) => void, selectAllCallback: (index: number) => void,
private _deleteRowCallback: (index: number) => void, private _deleteRowCallback: (index: number) => void,
private _revertRowCallback: () => void, private _revertRowCallback: () => void
@IInstantiationService instantiationService: IInstantiationService
) { ) {
super(dataService, selectAllCallback, instantiationService); super(dataService, selectAllCallback);
} }
/** /**
* Return actions given a click on an edit data grid * Return actions given a click on an edit data grid

View File

@@ -3,15 +3,11 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; import { IGridInfo, SaveFormat } from 'sql/workbench/parts/grid/common/interfaces';
import { DataService } from 'sql/workbench/parts/grid/services/dataService';
import { IGridInfo, SaveFormat } from 'sql/parts/grid/common/interfaces';
import { DataService } from 'sql/parts/grid/services/dataService';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { IAction, Action } from 'vs/base/common/actions'; import { IAction, Action } from 'vs/base/common/actions';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
export const GRID_SAVECSV_ID = 'grid.saveAsCsv'; export const GRID_SAVECSV_ID = 'grid.saveAsCsv';
export const GRID_SAVEJSON_ID = 'grid.saveAsJson'; export const GRID_SAVEJSON_ID = 'grid.saveAsJson';
@@ -32,8 +28,7 @@ export class GridActionProvider {
constructor( constructor(
protected _dataService: DataService, protected _dataService: DataService,
protected _selectAllCallback: (index: number) => void, protected _selectAllCallback: (index: number) => void
@IInstantiationService private _instantiationService: IInstantiationService
) { ) {
} }
@@ -42,7 +37,7 @@ export class GridActionProvider {
* Return actions given a click on a grid * Return actions given a click on a grid
*/ */
public getGridActions(): IAction[] { public getGridActions(): IAction[] {
let actions: IAction[] = []; const actions: IAction[] = [];
actions.push(new SaveResultAction(SaveResultAction.SAVECSV_ID, SaveResultAction.SAVECSV_LABEL, SaveFormat.CSV, this._dataService)); actions.push(new SaveResultAction(SaveResultAction.SAVECSV_ID, SaveResultAction.SAVECSV_LABEL, SaveFormat.CSV, this._dataService));
actions.push(new SaveResultAction(SaveResultAction.SAVEJSON_ID, SaveResultAction.SAVEJSON_LABEL, SaveFormat.JSON, this._dataService)); actions.push(new SaveResultAction(SaveResultAction.SAVEJSON_ID, SaveResultAction.SAVEJSON_LABEL, SaveFormat.JSON, this._dataService));
actions.push(new SaveResultAction(SaveResultAction.SAVEEXCEL_ID, SaveResultAction.SAVEEXCEL_LABEL, SaveFormat.EXCEL, this._dataService)); actions.push(new SaveResultAction(SaveResultAction.SAVEEXCEL_ID, SaveResultAction.SAVEEXCEL_LABEL, SaveFormat.EXCEL, this._dataService));
@@ -53,30 +48,20 @@ export class GridActionProvider {
return actions; return actions;
} }
/**
* Return actions given a click on a messages pane
*/
public getMessagesActions(dataService: DataService, selectAllCallback: () => void): IAction[] {
let actions: IAction[] = [];
actions.push(this._instantiationService.createInstance(CopyMessagesAction, CopyMessagesAction.ID, CopyMessagesAction.LABEL));
actions.push(new SelectAllMessagesAction(SelectAllMessagesAction.ID, SelectAllMessagesAction.LABEL, selectAllCallback));
return actions;
}
} }
export class SaveResultAction extends Action { class SaveResultAction extends Action {
public static SAVECSV_ID = GRID_SAVECSV_ID; public static SAVECSV_ID = GRID_SAVECSV_ID;
public static SAVECSV_LABEL = localize('saveAsCsv', 'Save As CSV'); public static SAVECSV_LABEL = localize('saveAsCsv', "Save As CSV");
public static SAVEJSON_ID = GRID_SAVEJSON_ID; public static SAVEJSON_ID = GRID_SAVEJSON_ID;
public static SAVEJSON_LABEL = localize('saveAsJson', 'Save As JSON'); public static SAVEJSON_LABEL = localize('saveAsJson', "Save As JSON");
public static SAVEEXCEL_ID = GRID_SAVEEXCEL_ID; public static SAVEEXCEL_ID = GRID_SAVEEXCEL_ID;
public static SAVEEXCEL_LABEL = localize('saveAsExcel', 'Save As Excel'); public static SAVEEXCEL_LABEL = localize('saveAsExcel', "Save As Excel");
public static SAVEXML_ID = GRID_SAVEXML_ID; public static SAVEXML_ID = GRID_SAVEXML_ID;
public static SAVEXML_LABEL = localize('saveAsXml', 'Save As XML'); public static SAVEXML_LABEL = localize('saveAsXml', "Save As XML");
constructor( constructor(
id: string, id: string,
@@ -98,12 +83,12 @@ export class SaveResultAction extends Action {
} }
} }
export class CopyResultAction extends Action { class CopyResultAction extends Action {
public static COPY_ID = GRID_COPY_ID; public static COPY_ID = GRID_COPY_ID;
public static COPY_LABEL = localize('copySelection', 'Copy'); public static COPY_LABEL = localize('copySelection', "Copy");
public static COPYWITHHEADERS_ID = GRID_COPYWITHHEADERS_ID; public static COPYWITHHEADERS_ID = GRID_COPYWITHHEADERS_ID;
public static COPYWITHHEADERS_LABEL = localize('copyWithHeaders', 'Copy With Headers'); public static COPYWITHHEADERS_LABEL = localize('copyWithHeaders', "Copy With Headers");
constructor( constructor(
id: string, id: string,
@@ -120,9 +105,9 @@ export class CopyResultAction extends Action {
} }
} }
export class SelectAllGridAction extends Action { class SelectAllGridAction extends Action {
public static ID = GRID_SELECTALL_ID; public static ID = GRID_SELECTALL_ID;
public static LABEL = localize('selectAll', 'Select All'); public static LABEL = localize('selectAll', "Select All");
constructor( constructor(
id: string, id: string,
@@ -137,39 +122,3 @@ export class SelectAllGridAction extends Action {
return Promise.resolve(true); return Promise.resolve(true);
} }
} }
export class SelectAllMessagesAction extends Action {
public static ID = MESSAGES_SELECTALL_ID;
public static LABEL = localize('selectAll', 'Select All');
constructor(
id: string,
label: string,
private selectAllCallback: () => void
) {
super(id, label);
}
public run(): Promise<boolean> {
this.selectAllCallback();
return Promise.resolve(true);
}
}
export class CopyMessagesAction extends Action {
public static ID = MESSAGES_COPY_ID;
public static LABEL = localize('copyMessages', 'Copy');
constructor(
id: string,
label: string,
@IClipboardService private clipboardService: IClipboardService
) {
super(id, label);
}
public run(selectedRange: Selection): Promise<boolean> {
this.clipboardService.writeText(selectedRange.toString());
return Promise.resolve(true);
}
}

View File

@@ -3,9 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; import * as GridContentEvents from 'sql/workbench/parts/grid/common/gridContentEvents';
import * as GridContentEvents from 'sql/parts/grid/common/gridContentEvents';
import { IQueryModelService } from 'sql/platform/query/common/queryModel'; import { IQueryModelService } from 'sql/platform/query/common/queryModel';
import { QueryEditor } from 'sql/parts/query/editor/queryEditor'; import { QueryEditor } from 'sql/parts/query/editor/queryEditor';
import { EditDataEditor } from 'sql/parts/editData/editor/editDataEditor'; import { EditDataEditor } from 'sql/parts/editData/editor/editDataEditor';
@@ -88,4 +86,3 @@ export const viewAsChart = (accessor: ServicesAccessor) => {
export const goToNextGrid = (accessor: ServicesAccessor) => { export const goToNextGrid = (accessor: ServicesAccessor) => {
runActionOnActiveResultsEditor(accessor, GridContentEvents.GoToNextGrid); runActionOnActiveResultsEditor(accessor, GridContentEvents.GoToNextGrid);
}; };

View File

@@ -3,13 +3,8 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; import 'vs/css!sql/workbench/parts/grid/media/flexbox';
import 'vs/css!sql/workbench/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slickColorTheme';
import 'vs/css!sql/parts/grid/media/flexbox';
import 'vs/css!sql/parts/grid/media/styles';
import 'vs/css!sql/parts/grid/media/slick.grid';
import 'vs/css!sql/parts/grid/media/slickGrid';
import { Subscription, Subject } from 'rxjs/Rx'; import { Subscription, Subject } from 'rxjs/Rx';
import { ElementRef, QueryList, ChangeDetectorRef, ViewChildren } from '@angular/core'; import { ElementRef, QueryList, ChangeDetectorRef, ViewChildren } from '@angular/core';
@@ -17,12 +12,12 @@ import { SlickGrid } from 'angular2-slickgrid';
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils'; import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
import * as Constants from 'sql/parts/query/common/constants'; import * as Constants from 'sql/parts/query/common/constants';
import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants'; import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants';
import { IGridInfo, IGridDataSet, SaveFormat } from 'sql/parts/grid/common/interfaces'; import { IGridInfo, IGridDataSet, SaveFormat } from 'sql/workbench/parts/grid/common/interfaces';
import * as Utils from 'sql/platform/connection/common/utils'; import * as Utils from 'sql/platform/connection/common/utils';
import { DataService } from 'sql/parts/grid/services/dataService'; import { DataService } from 'sql/workbench/parts/grid/services/dataService';
import * as actions from 'sql/parts/grid/views/gridActions'; import * as actions from 'sql/workbench/parts/grid/views/gridActions';
import * as Services from 'sql/parts/grid/services/sharedServices'; import * as Services from 'sql/base/browser/ui/table/formatters';
import * as GridContentEvents from 'sql/parts/grid/common/gridContentEvents'; import * as GridContentEvents from 'sql/workbench/parts/grid/common/gridContentEvents';
import { ResultsVisibleContext, ResultsGridFocussedContext, ResultsMessagesFocussedContext, QueryEditorVisibleContext } from 'sql/parts/query/common/queryContext'; import { ResultsVisibleContext, ResultsGridFocussedContext, ResultsMessagesFocussedContext, QueryEditorVisibleContext } from 'sql/parts/query/common/queryContext';
import { error } from 'sql/base/common/log'; import { error } from 'sql/base/common/log';
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService'; import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
@@ -37,7 +32,6 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { INotificationService } from 'vs/platform/notification/common/notification';
export abstract class GridParentComponent { export abstract class GridParentComponent {
// CONSTANTS // CONSTANTS
@@ -101,8 +95,7 @@ export abstract class GridParentComponent {
protected contextKeyService: IContextKeyService, protected contextKeyService: IContextKeyService,
protected configurationService: IConfigurationService, protected configurationService: IConfigurationService,
protected clipboardService: IClipboardService, protected clipboardService: IClipboardService,
protected queryEditorService: IQueryEditorService, protected queryEditorService: IQueryEditorService
protected notificationService: INotificationService
) { ) {
this.toDispose = []; this.toDispose = [];
} }

View File

@@ -5,7 +5,7 @@
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView'; import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
import { Table } from 'sql/base/browser/ui/table/table'; import { Table } from 'sql/base/browser/ui/table/table';
import { textFormatter } from 'sql/parts/grid/services/sharedServices'; import { textFormatter } from 'sql/base/browser/ui/table/formatters';
import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin'; import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin';
import { escape } from 'sql/base/common/strings'; import { escape } from 'sql/base/common/strings';
import { IDataResource } from 'sql/workbench/services/notebook/sql/sqlSessionManager'; import { IDataResource } from 'sql/workbench/services/notebook/sql/sqlSessionManager';
@@ -86,30 +86,30 @@ export function renderDataResource(
// SlickGrid requires columns and data to be in a very specific format; this code was adapted from tableInsight.component.ts // SlickGrid requires columns and data to be in a very specific format; this code was adapted from tableInsight.component.ts
function transformData(rows: any[], columns: Slick.Column<any>[]): { [key: string]: string }[] { function transformData(rows: any[], columns: Slick.Column<any>[]): { [key: string]: string }[] {
return rows.map(row => { return rows.map(row => {
let dataWithSchema = {}; let dataWithSchema = {};
Object.keys(row).forEach((val, index) => { Object.keys(row).forEach((val, index) => {
let displayValue = String(Object.values(row)[index]); let displayValue = String(Object.values(row)[index]);
// Since the columns[0] represents the row number, start at 1 // Since the columns[0] represents the row number, start at 1
dataWithSchema[columns[index + 1].field] = { dataWithSchema[columns[index + 1].field] = {
displayValue: displayValue, displayValue: displayValue,
ariaLabel: escape(displayValue), ariaLabel: escape(displayValue),
isNull: false isNull: false
}; };
}); });
return dataWithSchema; return dataWithSchema;
}); });
} }
function transformColumns(columns: string[]): Slick.Column<any>[] { function transformColumns(columns: string[]): Slick.Column<any>[] {
return columns.map((col, index) => { return columns.map((col, index) => {
return <Slick.Column<any>>{ return <Slick.Column<any>>{
name: col, name: col,
id: col, id: col,
field: index.toString(), field: index.toString(),
formatter: textFormatter formatter: textFormatter
}; };
}); });
} }
/** /**

View File

@@ -3,10 +3,8 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict';
import * as azdata from 'azdata';
import * as assert from 'assert'; import * as assert from 'assert';
import * as SharedServices from 'sql/parts/grid/services/sharedServices'; import * as SharedServices from 'sql/base/browser/ui/table/formatters';
const testText = '<div>test text</div>'; const testText = '<div>test text</div>';

View File

@@ -10,10 +10,6 @@
<body class="vs-dark" aria-label=""> <body class="vs-dark" aria-label="">
</body> </body>
<!-- // {{SQL CARBON EDIT}} -->
<script src="../../../../sql/parts/grid/load/loadJquery.js"></script>
<script src="../../../../../node_modules/slickgrid/lib/jquery.event.drag-2.3.0.js"></script>
<script src="../../../../../node_modules/slickgrid/lib/jquery-ui-1.9.2.js"></script>
<!-- Startup via workbench.js --> <!-- Startup via workbench.js -->
<script src="workbench.js"></script> <script src="workbench.js"></script>
</html> </html>

View File

@@ -19,6 +19,10 @@ process['lazyEnv'] = getLazyEnv();
/* eslint-disable */ /* eslint-disable */
// SQL global imports // SQL global imports
const jQuery = require('jquery');
const $ = jQuery;
require('slickgrid/lib/jquery.event.drag-2.3.0');
require('slickgrid/lib/jquery-ui-1.9.2');
const _ = require('underscore')._; const _ = require('underscore')._;
require('slickgrid/slick.core'); require('slickgrid/slick.core');
const Slick = window.Slick; const Slick = window.Slick;