mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(data-viewer-plugin): add where filter support for model
CB-85
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
+1
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user