feat(data-viewer-plugin): add where filter support for model

CB-85
This commit is contained in:
Wroud
2020-06-11 18:21:43 +03:00
parent a70c23e056
commit 5a56a099c8
3 changed files with 22 additions and 12 deletions
@@ -97,32 +97,33 @@ export class DataViewerTableService {
}
private async requestDataAsync(
data: TableViewerModel,
model: TableViewerModel,
offset: number,
count: number
): Promise<IRequestDataResult> {
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!,
@@ -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();
}
@@ -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;