From 5a56a099c8ef82c348282b005b6b0276877e1560 Mon Sep 17 00:00:00 2001 From: Wroud Date: Thu, 11 Jun 2020 18:21:43 +0300 Subject: [PATCH] feat(data-viewer-plugin): add where filter support for model CB-85 --- .../src/DataViewerTableService.ts | 21 ++++++++++--------- .../src/TableViewer/TableViewerModel.ts | 10 +++++++++ .../SqlResultPanelController.ts | 3 +-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts b/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts index c3a88c736c..8122701bb9 100644 --- a/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts +++ b/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts @@ -97,32 +97,33 @@ export class DataViewerTableService { } private async requestDataAsync( - data: TableViewerModel, + model: TableViewerModel, offset: number, count: number ): Promise { - if (!data.containerNodePath) { + if (!model.containerNodePath) { throw new Error('containerNodePath must be provided for table'); } - if (!data.executionContext) { + if (!model.executionContext) { // it is first data request - const executionContext: IExecutionContext = await this.createExecutionContext(data.connectionId); - data.executionContext = executionContext; + const executionContext: IExecutionContext = await this.createExecutionContext(model.connectionId); + model.executionContext = executionContext; } const { readDataFromContainer } = await this.graphQLService.gql.readDataFromContainer({ - connectionId: data.executionContext.connectionId, - contextId: data.executionContext.contextId, - containerNodePath: data.containerNodePath, + connectionId: model.executionContext.connectionId, + contextId: model.executionContext.contextId, + containerNodePath: model.containerNodePath, filter: { offset, limit: count, - constraints: Array.from(data.getSortedColumns()), + constraints: Array.from(model.getSortedColumns()), + where: model.getQueryWhereFilter() || undefined, }, }); const dataSet = readDataFromContainer!.results[0].resultSet!; // we expect only one dataset for a table - data.resultId = dataSet.id; // server generates new resultId on each fetch + model.resultId = dataSet.id; // server generates new resultId on each fetch const result: IRequestDataResult = { rows: dataSet.rows!, diff --git a/webapp/packages/data-viewer-plugin/src/TableViewer/TableViewerModel.ts b/webapp/packages/data-viewer-plugin/src/TableViewer/TableViewerModel.ts index 6e63e22f2c..e8a7a5c164 100644 --- a/webapp/packages/data-viewer-plugin/src/TableViewer/TableViewerModel.ts +++ b/webapp/packages/data-viewer-plugin/src/TableViewer/TableViewerModel.ts @@ -108,6 +108,7 @@ export class TableViewerModel implements ITableViewerModelOptions { @observable private _hasMoreRows = true @observable private _isLoaderVisible = false; @observable private _chunkSize: number = this.getDefaultRowsCount(); + @observable private queryWhereFilter: string | null = null; private exception: GQLError | null = null; private tableDataModel = new TableDataModel(); @@ -140,6 +141,15 @@ export class TableViewerModel implements ITableViewerModelOptions { } } + getQueryWhereFilter() { + return this.queryWhereFilter; + } + + setQueryWhereFilter(where: string | null) { + this.queryWhereFilter = where; + this.resetData(); + } + getSortedColumns() { return this.sortedColumns.values(); } diff --git a/webapp/packages/sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts b/webapp/packages/sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts index 43a8dbb630..019f3b8b2a 100644 --- a/webapp/packages/sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts +++ b/webapp/packages/sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts @@ -17,11 +17,9 @@ import { PromiseCancelledError } from '@dbeaver/core/utils'; import { fetchingSettings, IRequestDataResult, - IRequestDataResultOptions, RowDiff, TableViewerStorageService, TableViewerModel, - IExecutionContext, } from '@dbeaver/data-viewer-plugin'; import { ISqlResultPanelParams } from '../../ISqlEditorTabState'; @@ -149,6 +147,7 @@ implements IInitializableController, IDestructibleController { offset, limit: count, constraints: Array.from(model.getSortedColumns()), + where: model.getQueryWhereFilter() || undefined, }); sqlExecutingState.setCurrentlyExecutingQuery(queryExecutionProcess); const response = await queryExecutionProcess.promise;