diff --git a/webapp/packages/core/src/app/shared/ConnectionsManager/extensions/IConnectionProvider.ts b/webapp/packages/core/src/app/shared/ConnectionsManager/extensions/IConnectionProvider.ts index d470d472de..185a54b939 100644 --- a/webapp/packages/core/src/app/shared/ConnectionsManager/extensions/IConnectionProvider.ts +++ b/webapp/packages/core/src/app/shared/ConnectionsManager/extensions/IConnectionProvider.ts @@ -11,7 +11,7 @@ import { createExtension, isExtension, IExtension } from '../../../../extensions const connectionProviderSymbol = Symbol('@extension/ConnectionProvider'); export interface IConnectionProvider { - (context: T): string; + (context: T): string | undefined; } export function connectionProvider(provider: IConnectionProvider) { diff --git a/webapp/packages/core/src/app/shared/NodesManager/NodesManagerService.ts b/webapp/packages/core/src/app/shared/NodesManager/NodesManagerService.ts index 4cc0148719..fee1035547 100644 --- a/webapp/packages/core/src/app/shared/NodesManager/NodesManagerService.ts +++ b/webapp/packages/core/src/app/shared/NodesManager/NodesManagerService.ts @@ -113,7 +113,7 @@ export class NodesManagerService { const { objectInfo } = await this.graphQLService.gql.queryDatabaseObjectInfo({ nodeId, - filter: { features: ['viewable', 'editPossible'] }, + // filter: { features: ['viewable', 'editPossible'] }, }); const info = { ...objectInfo.object, id: objectInfo.id }; @@ -142,7 +142,7 @@ export class NodesManagerService { childrenDatabaseObjectInfo, } = await this.graphQLService.gql.queryChildrenDatabaseObjectInfo({ nodePath: nodeId, - filter: { features: ['viewable', 'editPossible'] }, // filter properties for view + // filter: { features: ['viewable', 'editPossible'] }, // filter properties for view }); const children = childrenDatabaseObjectInfo.map(children => ({ diff --git a/webapp/packages/data-viewer-plugin/src/DataViewerTabService.ts b/webapp/packages/data-viewer-plugin/src/DataViewerTabService.ts index e51802d3dc..76ccb360c9 100644 --- a/webapp/packages/data-viewer-plugin/src/DataViewerTabService.ts +++ b/webapp/packages/data-viewer-plugin/src/DataViewerTabService.ts @@ -81,7 +81,12 @@ export class DataViewerTabService { } } - private handleTabSelect(tab: ITab) { + private async handleTabSelect(tab: ITab) { + const objectInfo = await this.nodesManagerService.loadDatabaseObjectInfo(tab.handlerState.objectId); + + if (!this.nodesManagerService.isNodeHasData(objectInfo)) { + return; + } this.dataViewerTableService.createTableModelIfNotExists(tab.handlerState.objectId); } diff --git a/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts b/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts index c8c7cfb5e7..dde604c1d9 100644 --- a/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts +++ b/webapp/packages/data-viewer-plugin/src/DataViewerTableService.ts @@ -6,7 +6,7 @@ * you may not use this file except in compliance with the License. */ -import { ConnectionsManagerService, IConnectionCatalogSchema } from '@dbeaver/core/app'; +import { ConnectionsManagerService } from '@dbeaver/core/app'; import { injectable } from '@dbeaver/core/di'; import { CommonDialogService } from '@dbeaver/core/dialogs'; import { GraphQLService } from '@dbeaver/core/sdk'; @@ -15,8 +15,12 @@ import { RowDiff } from './TableViewer/TableDataModel/EditedRow'; import { IRequestDataResult, ITableViewerModelInit, TableViewerModel } from './TableViewer/TableViewerModel'; import { TableViewerStorageService } from './TableViewer/TableViewerStorageService'; -interface ISqlContextParams extends IConnectionCatalogSchema { +interface ISqlContextParams { contextId: string; + connectionId: string; + objectCatalogId?: string; + objectSchemaId?: string; + } export interface IDataViewerTableModel { @@ -64,14 +68,22 @@ export class DataViewerTableService { return new TableViewerModel(callbacks, this.commonDialogService); } - private async createSqlContext(connectionCatalogSchema: IConnectionCatalogSchema): Promise { + private async createSqlContext( + connectionId: string, + defaultCatalog?: string, + defaultSchema?: string + ): Promise { - const response = await this.graphQLService.gql.sqlContextCreate(connectionCatalogSchema); + const response = await this.graphQLService.gql.sqlContextCreate({ + connectionId, + defaultCatalog, + defaultSchema, + }); return { contextId: response.context.id, - connectionId: connectionCatalogSchema.connectionId, - catalogId: response.context.defaultCatalog || null, - schemaId: response.context.defaultSchema || null, + connectionId, + objectCatalogId: response.context.defaultCatalog, + objectSchemaId: response.context.defaultSchema, }; } @@ -112,11 +124,7 @@ export class DataViewerTableService { if (!data.sqlContextParams) { // it is first data request - const sqlContextParams: ISqlContextParams = await this.createSqlContext({ - connectionId: data.connectionId, - catalogId: null, - schemaId: null, - }); + const sqlContextParams: ISqlContextParams = await this.createSqlContext(data.connectionId); data.sqlContextParams = sqlContextParams; } diff --git a/webapp/packages/object-viewer-plugin/src/ObjectViewerTabService.ts b/webapp/packages/object-viewer-plugin/src/ObjectViewerTabService.ts index 3f6e6be54a..463492b970 100644 --- a/webapp/packages/object-viewer-plugin/src/ObjectViewerTabService.ts +++ b/webapp/packages/object-viewer-plugin/src/ObjectViewerTabService.ts @@ -66,11 +66,11 @@ export class ObjectViewerTabService { const nodeInfo = this.nodesManagerService .getNodeContainerInfo(context.handlerState.objectId); - if (nodeInfo.connectionId) { - // connection node id differs from connection id - return NodeManagerUtils.connectionNodeIdToConnectionId(nodeInfo.connectionId); + if (!nodeInfo.connectionId) { + return; } - return ''; + // connection node id differs from connection id + return NodeManagerUtils.connectionNodeIdToConnectionId(nodeInfo.connectionId); } getDBObjectCatalog(context: ITab) { @@ -78,19 +78,19 @@ export class ObjectViewerTabService { .getNodeContainerInfo(context.handlerState.objectId); if (nodeInfo.catalogId) { - return nodeInfo.catalogId; + return; } - return ''; + return nodeInfo.catalogId; } getDBObjectSchema(context: ITab) { const nodeInfo = this.nodesManagerService .getNodeContainerInfo(context.handlerState.objectId); - if (nodeInfo.schemaId) { - return nodeInfo.schemaId; + if (!nodeInfo.schemaId) { + return; } - return ''; + return nodeInfo.schemaId; } registerTabHandler() {