From 958c81c3ab853eee1deec0be4b7b8d8047295c7c Mon Sep 17 00:00:00 2001 From: Wroud Date: Thu, 16 Dec 2021 22:45:03 +0300 Subject: [PATCH 1/7] fix: CB-1363 execution context schema & catalog cache --- .../service/sql/WebSQLContextInfo.java | 116 ++++-------------- .../ConnectionExecutionContextResource.ts | 3 + .../executionContextCreate.gql | 5 +- .../executionContextList.gql | 5 +- .../fragments/ExecutionContextInfo.gql | 6 + webapp/packages/core-sdk/src/sdk.ts | 24 ++-- .../src/SqlEditorTabService.ts | 4 +- 7 files changed, 52 insertions(+), 111 deletions(-) create mode 100644 webapp/packages/core-sdk/src/queries/fragments/ExecutionContextInfo.gql diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java index 1208e9f7c4..c104f7c3e1 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java @@ -51,8 +51,6 @@ public class WebSQLContextInfo { private final WebSQLProcessor processor; private final String id; - private DBSCatalog defaultCatalog; - private String defaultSchema; private final Map resultInfoMap = new HashMap<>(); private final AtomicInteger resultId = new AtomicInteger(); @@ -70,78 +68,12 @@ public class WebSQLContextInfo { catalogName, null, schemaName); - setContextDefaults(catalogName, schemaName); } catch (DBException e) { log.error("Error settings "); } } } - private void setContextDefaults(String catalogName, String schemaName) throws DBCException { - DBPDataSource dataSource = this.processor.getConnection().getDataSource(); - - DBSObject defaultObject = null; - DBRProgressMonitor monitor = this.processor.getWebSession().getProgressMonitor(); - if (CommonUtils.isEmpty(catalogName) && CommonUtils.isEmpty(schemaName)) { - ContextDefaultObjectsReader defaultObjectsReader = new ContextDefaultObjectsReader( - dataSource, - DBUtils.getOrOpenDefaultContext(dataSource, false) - ); - defaultObjectsReader.setReadNodes(false); - try { - defaultObjectsReader.run(monitor); - } catch (InvocationTargetException e) { - log.error("Error reading context defaults", e.getTargetException()); - } catch (InterruptedException e) { - // ignore - } - - catalogName = defaultObjectsReader.getDefaultCatalogName(); - defaultObject = defaultObjectsReader.getDefaultObject(); - } else { - DBCExecutionContextDefaults contextDefaults = processor.getExecutionContext().getContextDefaults(); - if (contextDefaults != null) { - defaultCatalog = contextDefaults.getDefaultCatalog(); - } - } - - if (defaultObject instanceof DBSCatalog) { - this.defaultCatalog = (DBSCatalog) defaultObject; - } else if (defaultObject instanceof DBSSchema) { - this.defaultCatalog = DBUtils.getParentOfType(DBSCatalog.class, defaultObject); - this.defaultSchema = defaultObject.getName(); - } else { - if (defaultObject == null && (!CommonUtils.isEmpty(catalogName) || !CommonUtils.isEmpty(schemaName))) { - String childObjectName = CommonUtils.toString(catalogName, schemaName); - DBSObjectContainer objectContainer = DBUtils.getAdapter(DBSObjectContainer.class, dataSource); - if (objectContainer != null) { - try { - DBSObject childObject = null; - if (schemaName != null && defaultCatalog != null) { - childObject = defaultCatalog.getChild(monitor, schemaName); - } else { - childObject = objectContainer.getChild(monitor, childObjectName); - } - if (childObject == null) { - log.debug("Can't find child '" + childObjectName + "'"); - } else if (childObject instanceof DBSCatalog) { - defaultCatalog = (DBSCatalog) childObject; - } else if (childObject instanceof DBSSchema) { - this.defaultCatalog = DBUtils.getParentOfType(DBSCatalog.class, childObject); - this.defaultSchema = childObject.getName(); - } - } catch (DBException e) { - log.error("Error reading default object '" + childObjectName + "'", e); - } - } - } - } - - if (defaultSchema == null && schemaName != null) { - defaultSchema = schemaName; - } - } - public WebSQLProcessor getProcessor() { return processor; } @@ -155,18 +87,38 @@ public class WebSQLContextInfo { } public String getDefaultCatalog() { - return defaultCatalog == null ? null : defaultCatalog.getName(); + DBCExecutionContextDefaults contextDefaults = processor.getExecutionContext().getContextDefaults(); + + if(contextDefaults != null) { + DBSCatalog catalog = contextDefaults.getDefaultCatalog(); + + return catalog == null ? null : catalog.getName(); + } + + return null; + } + + @WebAction + public String getDefaultSchema() { + DBCExecutionContextDefaults contextDefaults = processor.getExecutionContext().getContextDefaults(); + + if(contextDefaults != null) { + DBSSchema schema = contextDefaults.getDefaultSchema(); + + return schema == null ? null : schema.getName(); + } + + return null; } public void setDefaults(String catalogName, String schemaName) throws DBWebException, DBCException { - String oldCatalogName = defaultCatalog == null ? null : defaultCatalog.getName(); - setContextDefaults(catalogName, schemaName); + String oldCatalogName = this.getDefaultCatalog(); try { DBExecUtils.setExecutionContextDefaults( processor.getWebSession().getProgressMonitor(), processor.getConnection().getDataSource(), processor.getExecutionContext(), - defaultCatalog == null ? null : defaultCatalog.getName(), + catalogName, oldCatalogName, schemaName); } catch (DBException e) { @@ -174,26 +126,6 @@ public class WebSQLContextInfo { } } - @WebAction - public String getDefaultSchema() { - if (defaultSchema == null) { - try { - DBCExecutionContext defaultContext = DBUtils.getOrOpenDefaultContext( - defaultCatalog != null ? defaultCatalog : processor.getConnection().getDataSource(), false); - DBSObject ao = DBUtils.getActiveInstanceObject(defaultContext); - if (ao instanceof DBSSchema) { - defaultSchema = ao.getName(); - } else { - defaultSchema = ""; - } - } catch (DBCException e) { - log.error(e); - return null; - } - } - return CommonUtils.isEmpty(defaultSchema) ? null : defaultSchema; - } - @NotNull public WebSQLResultsInfo saveResult(@NotNull DBSDataContainer dataContainer, @NotNull DBDAttributeBinding[] attributes) { WebSQLResultsInfo resultInfo = new WebSQLResultsInfo( diff --git a/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts b/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts index 51dc8094cc..ac47feab4c 100644 --- a/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts +++ b/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts @@ -56,6 +56,7 @@ export class ConnectionExecutionContextResource extends CachedMapResource; icon?: Maybe; description?: Maybe; defaultPort?: Maybe; defaultDatabase?: Maybe; defaultServer?: Maybe; defaultUser?: Maybe; sampleURL?: Maybe; embedded?: Maybe; anonymousAccess?: Maybe; promotedScore?: Maybe; defaultAuthModel: string; applicableNetworkHandlers: Array>; driverParameters?: Maybe; providerProperties?: Maybe; displayName?: Maybe; description?: Maybe; category?: Maybe; dataType?: Maybe; defaultValue?: Maybe; validValues?: Maybe>>; length: ObjectPropertyLength; features: string[]; order: number }>>; driverProperties?: Maybe; displayName?: Maybe; description?: Maybe; category?: Maybe; dataType?: Maybe; defaultValue?: Maybe; validValues?: Maybe>> }>> } +export interface ExecutionContextInfoFragment { id: string; connectionId: string; defaultCatalog?: Maybe; defaultSchema?: Maybe } + export interface NavNodeDbObjectInfoFragment { id: string; object?: Maybe<{ type?: Maybe; features?: Maybe; properties?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>>> }> } export interface NavNodeInfoFragment { id: string; name?: Maybe; hasChildren?: Maybe; nodeType?: Maybe; icon?: Maybe; folder?: Maybe; inline?: Maybe; navigable?: Maybe; features?: Maybe; object?: Maybe<{ features?: Maybe }>; nodeDetails?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>> } @@ -2118,6 +2120,14 @@ export const DatabaseDriverFragmentDoc = ` driverParameters @include(if: $includeDriverParameters) } `; +export const ExecutionContextInfoFragmentDoc = ` + fragment ExecutionContextInfo on SQLContextInfo { + id + connectionId + defaultCatalog + defaultSchema +} + `; export const NavNodePropertiesFragmentDoc = ` fragment NavNodeProperties on ObjectPropertyInfo { id @@ -2576,13 +2586,10 @@ export const ExecutionContextCreateDocument = ` defaultCatalog: $defaultCatalog defaultSchema: $defaultSchema ) { - id - connectionId - defaultCatalog - defaultSchema + ...ExecutionContextInfo } } - `; + ${ExecutionContextInfoFragmentDoc}`; export const ExecutionContextDestroyDocument = ` mutation executionContextDestroy($connectionId: ID!, $contextId: ID!) { sqlContextDestroy(connectionId: $connectionId, contextId: $contextId) @@ -2591,13 +2598,10 @@ export const ExecutionContextDestroyDocument = ` export const ExecutionContextListDocument = ` query executionContextList($connectionId: ID, $contextId: ID) { contexts: sqlListContexts(connectionId: $connectionId, contextId: $contextId) { - id - connectionId - defaultCatalog - defaultSchema + ...ExecutionContextInfo } } - `; + ${ExecutionContextInfoFragmentDoc}`; export const ExecutionContextUpdateDocument = ` mutation executionContextUpdate($connectionId: ID!, $contextId: ID!, $defaultCatalog: ID, $defaultSchema: ID) { context: sqlContextSetDefaults( diff --git a/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts b/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts index 30709d72b1..619887efc3 100644 --- a/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts +++ b/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts @@ -105,8 +105,10 @@ export class SqlEditorTabService extends Bootstrap { for (const tab of tabs) { const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext!.baseId); - if (!executionContext) { + if (!executionContext?.context) { this.resetConnectionInfo(tab.handlerState); + } else { + tab.handlerState.executionContext = { ...executionContext.context }; } } } From 75419feb9a778eefea13c76a2e23a576b664c269 Mon Sep 17 00:00:00 2001 From: Wroud Date: Sun, 19 Dec 2021 01:44:26 +0300 Subject: [PATCH 2/7] fix: CB-835 catalog and schema behaviour --- .../schema/service.navigator.graphqls | 10 ++- .../service/navigator/WebCatalog.java | 52 ++++++++++++ .../navigator/WebDatabaseObjectInfo.java | 13 +++ .../navigator/WebStructContainers.java | 16 +--- .../navigator/impl/WebServiceNavigator.java | 84 ++++++++++++++----- .../ConnectionSchemaManagerService.ts | 4 +- .../ConnectionSelectorController.ts | 56 +++++++------ .../src/ConnectionsManagerService.ts | 8 +- .../core-connections/src/ContainerResource.ts | 25 ++++-- .../database/navGetStructContainers.gql | 28 ++++--- webapp/packages/core-sdk/src/sdk.ts | 39 ++++++--- 11 files changed, 240 insertions(+), 95 deletions(-) create mode 100644 server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java diff --git a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls index 9843bc6373..b2022dd4c4 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls @@ -30,6 +30,8 @@ type DatabaseObjectInfo { description: String # Object type. Java class name in most cases type: String + # NavigationNodeInfo for object + navNode: NavigatorNodeInfo # Read object properties. # Optional parameter 'ids' filters properties by id. null means all properties. @@ -83,11 +85,15 @@ type NavigatorNodeInfo { navigable: Boolean } -type DatabaseStructContainers { - catalogList: [ DatabaseObjectInfo! ]! +type DatabaseCatalog { + catalog: DatabaseObjectInfo! schemaList: [ DatabaseObjectInfo! ]! } +type DatabaseStructContainers { + catalogList: [ DatabaseCatalog! ]! +} + #################################################### # Main API #################################################### diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java new file mode 100644 index 0000000000..0f35772d9c --- /dev/null +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java @@ -0,0 +1,52 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2021 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.cloudbeaver.service.navigator; + +import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.Log; + +import java.util.ArrayList; +import java.util.List; + + +/** + * WebCatalog + */ +public class WebCatalog { + + private static final Log log = Log.getLog(WebCatalog.class); + + private WebDatabaseObjectInfo catalog; + private List schemaList = new ArrayList<>(); + + public WebCatalog(@NotNull WebDatabaseObjectInfo catalog) { + this.catalog = catalog; + } + + @NotNull + public WebDatabaseObjectInfo getCatalog() { + return catalog; + } + + public List getSchemaList() { + return schemaList; + } + + public void setSchemaList(List schemaList) { + this.schemaList = schemaList; + } +} diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java index 381da845af..bc1d0dbd9b 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java @@ -16,13 +16,17 @@ */ package io.cloudbeaver.service.navigator; +import io.cloudbeaver.DBWebException; import io.cloudbeaver.model.WebPropertyInfo; import io.cloudbeaver.model.session.WebSession; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.*; import org.jkiss.dbeaver.model.meta.Property; +import org.jkiss.dbeaver.model.navigator.DBNModel; +import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor; +import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.*; import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; import org.jkiss.dbeaver.model.struct.rdb.DBSSchema; @@ -51,6 +55,15 @@ public class WebDatabaseObjectInfo { // General properties /////////////////////////////////// + @Property + public WebNavigatorNodeInfo getNavNode(){ + DBNModel navigatorModel = session.getNavigatorModel(); + DBRProgressMonitor monitor = this.session.getProgressMonitor(); + DBNNode node = navigatorModel.getNodeByObject(monitor, this.object, false); + + return node == null ? null : new WebNavigatorNodeInfo(session, node); + } + @Property public String getName() { return object.getName(); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java index 7adf88c705..5b3113efad 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java @@ -21,6 +21,7 @@ import org.jkiss.dbeaver.Log; import java.util.ArrayList; import java.util.List; + /** * WebStructContainers */ @@ -28,22 +29,13 @@ public class WebStructContainers { private static final Log log = Log.getLog(WebStructContainers.class); - private List catalogList = new ArrayList<>(); - private List schemaList = new ArrayList<>(); + private List catalogList = new ArrayList<>(); - public List getCatalogList() { + public List getCatalogList() { return catalogList; } - public void setCatalogList(List catalogList) { + public void setCatalogList(List catalogList) { this.catalogList = catalogList; } - - public List getSchemaList() { - return schemaList; - } - - public void setSchemaList(List schemaList) { - this.schemaList = schemaList; - } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index 9082e0f98d..e0a58dbc9c 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -21,10 +21,7 @@ import io.cloudbeaver.DBWebException; import io.cloudbeaver.model.WebCommandContext; import io.cloudbeaver.model.WebConnectionInfo; import io.cloudbeaver.model.session.WebSession; -import io.cloudbeaver.service.navigator.DBWServiceNavigator; -import io.cloudbeaver.service.navigator.WebDatabaseObjectInfo; -import io.cloudbeaver.service.navigator.WebNavigatorNodeInfo; -import io.cloudbeaver.service.navigator.WebStructContainers; +import io.cloudbeaver.service.navigator.*; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.DBPDataSource; @@ -33,16 +30,17 @@ import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.edit.DBEObjectMaker; import org.jkiss.dbeaver.model.edit.DBEObjectRenamer; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; -import org.jkiss.dbeaver.model.impl.struct.ContextDefaultObjectsReader; +import org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults; import org.jkiss.dbeaver.model.navigator.*; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSObject; +import org.jkiss.dbeaver.model.struct.DBSObjectContainer; import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; +import org.jkiss.dbeaver.model.struct.rdb.DBSSchema; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.CommonUtils; -import java.lang.reflect.InvocationTargetException; import java.util.*; /** @@ -170,32 +168,74 @@ public class WebServiceNavigator implements DBWServiceNavigator { @Override public WebStructContainers getStructContainers(WebConnectionInfo connection, String catalog) throws DBWebException { - DBPDataSource dataSource = connection.getDataSource(); + DBRProgressMonitor monitor = connection.getSession().getProgressMonitor(); DBCExecutionContext executionContext = DBUtils.getDefaultContext(connection.getDataSource(), false); + DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults(); - ContextDefaultObjectsReader reader = new ContextDefaultObjectsReader(dataSource, executionContext); - reader.setReadNodes(false); - try { - reader.run(connection.getSession().getProgressMonitor()); - } catch (InvocationTargetException e) { - throw new DBWebException("Error reading context defaults", e.getTargetException()); - } catch (InterruptedException e) { - // ignore - } WebStructContainers structContainers = new WebStructContainers(); - if (!CommonUtils.isEmpty(reader.getObjectList())) { - for (DBSObject node : reader.getObjectList()) { - if (!dataSource.getContainer().getNavigatorSettings().isShowSystemObjects() && DBUtils.isSystemObject(node)) { - continue; + + List nodes = this.getCatalogs( + monitor, + connection.getDataSourceContainer().getDataSource(), + contextDefaults + ); + + List catalogList = structContainers.getCatalogList(); + + for (DBSObject node : nodes) { + if (!dataSource.getContainer().getNavigatorSettings().isShowSystemObjects() && DBUtils.isSystemObject(node)) { + continue; + } + + if(node instanceof DBSCatalog) { + WebDatabaseObjectInfo catalogObjectInfo = new WebDatabaseObjectInfo(connection.getSession(), node); + WebCatalog webCatalog = new WebCatalog(catalogObjectInfo); + + if(contextDefaults.supportsSchemaChange()) { + try { + + List schemaList = webCatalog.getSchemaList(); + Collection objectsCollection = ((DBSObjectContainer) node).getChildren(monitor); + + for (DBSObject schemaObject : objectsCollection) { + if (!dataSource.getContainer().getNavigatorSettings().isShowSystemObjects() && DBUtils.isSystemObject(node)) { + continue; + } + if (schemaObject instanceof DBSSchema) { + schemaList.add(new WebDatabaseObjectInfo(connection.getSession(), schemaObject)); + } + } + } catch (DBException e) { +// throw new DBWebException("Error reading schema list", e); + // TODO: we need to log some message to console + } } - List objectInfos = node instanceof DBSCatalog ? structContainers.getCatalogList() : structContainers.getSchemaList(); - objectInfos.add(new WebDatabaseObjectInfo(connection.getSession(), node)); + + catalogList.add(webCatalog); } } return structContainers; } + protected List getCatalogs(DBRProgressMonitor monitor, DBSObject rootObject, DBCExecutionContextDefaults contextDefaults) throws DBWebException { + if (rootObject instanceof DBSObjectContainer) { + try { + Collection objectsCollection; + if (rootObject instanceof DBSCatalog && contextDefaults != null && !contextDefaults.supportsCatalogChange()) { + objectsCollection = Collections.singletonList(contextDefaults.getDefaultCatalog()); + } else { + objectsCollection = ((DBSObjectContainer) rootObject).getChildren(monitor); + } + return new ArrayList(objectsCollection); + } catch (DBException e) { + throw new DBWebException("Error reading context defaults", e); +// return Collections.emptyList(); + } + } + return Collections.emptyList(); + } + @Override public String renameNode(@NotNull WebSession session, @NotNull String nodePath, @NotNull String newName) throws DBWebException { try { diff --git a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts index 3fbcca17cf..cab264961e 100644 --- a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts +++ b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts @@ -14,7 +14,7 @@ import { ObjectContainer, DBDriverResource, isConnectionProvider, IConnectionProvider, - isConnectionSetter, IConnectionSetter + isConnectionSetter, IConnectionSetter, ICatalogData } from '@cloudbeaver/core-connections'; import { Bootstrap, injectable } from '@cloudbeaver/core-di'; import { NotificationService } from '@cloudbeaver/core-events'; @@ -90,7 +90,7 @@ export class ConnectionSchemaManagerService extends Bootstrap { ); } - get objectContainerList(): ObjectContainer[] | undefined { + get objectContainerList(): ICatalogData[] | undefined { if (!this.currentConnectionId) { return; } diff --git a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts index 1064071aa4..5c1de72ab1 100644 --- a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts +++ b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts @@ -178,37 +178,45 @@ export class ConnectionSelectorController { return []; } - const list = this.connectionSelectorService.objectContainerList - .filter(item => !!item.name) - .map(item => { - const isCatalog = item.features?.includes(EObjectFeature.catalog); - const catalogName = isCatalog ? item.name : this.connectionSelectorService.currentObjectCatalogId; - const schemaName = !isCatalog ? item.name : this.connectionSelectorService.currentObjectSchemaId; + const items: IMenuItem[] = []; - const title = NodeManagerUtils.concatSchemaAndCatalog( - catalogName, - schemaName - ); + for (const catalogData of this.connectionSelectorService.objectContainerList) { + const catalog = catalogData.catalog; + if (!catalog.name) { + continue; + } - const handler = isCatalog - ? () => this.connectionSelectorService.selectCatalog(catalogName!) - : () => this.connectionSelectorService.selectSchema(schemaName!); + if (catalogData.schemaList.length === 0) { + items.push({ + id: catalog.name, + title: catalog.name, + icon: 'database', + onClick: () => this.connectionSelectorService.selectCatalog(catalog.name!), + }); + } - let icon = 'database'; - - if (catalogName && schemaName) { - icon = 'schema_system'; + for (const schema of catalogData.schemaList) { + if (!schema.name) { + continue; } - const menuItem: IMenuItem = { + const title = NodeManagerUtils.concatSchemaAndCatalog( + catalog.name, + schema.name + ); + + items.push({ id: title, title, - icon, - onClick: handler, - }; - return menuItem; - }); + icon: 'schema_system', + onClick: async () => { + await this.connectionSelectorService.selectCatalog(catalog.name!); + await this.connectionSelectorService.selectSchema(schema.name!); + }, + }); + } + } - return list; + return items; } } diff --git a/webapp/packages/core-connections/src/ConnectionsManagerService.ts b/webapp/packages/core-connections/src/ConnectionsManagerService.ts index 28126a0b03..6057ad4172 100644 --- a/webapp/packages/core-connections/src/ConnectionsManagerService.ts +++ b/webapp/packages/core-connections/src/ConnectionsManagerService.ts @@ -13,7 +13,7 @@ import { NotificationService } from '@cloudbeaver/core-events'; import { Executor, IExecutor } from '@cloudbeaver/core-executor'; import { ConnectionInfoResource, Connection } from './ConnectionInfoResource'; -import { ContainerResource, ObjectContainer } from './ContainerResource'; +import { ContainerResource, ICatalogData, ObjectContainer } from './ContainerResource'; import { EConnectionFeature } from './EConnectionFeature'; @injectable() @@ -48,11 +48,11 @@ export class ConnectionsManagerService { objectCatalogId: string, objectSchemaId?: string ): ObjectContainer | undefined { - const objectContainers = this.connectionObjectContainers.get({ connectionId, catalogId: objectCatalogId }); + const objectContainers = this.connectionObjectContainers.getCatalogData(connectionId, objectCatalogId); if (!objectContainers) { return; } - return objectContainers.find( + return objectContainers.schemaList.find( objectContainer => objectContainer.name === objectSchemaId || objectContainer.name === objectCatalogId ); } @@ -130,7 +130,7 @@ export class ConnectionsManagerService { } } - async loadObjectContainer(connectionId: string, catalogId?: string): Promise { + async loadObjectContainer(connectionId: string, catalogId?: string): Promise { await this.connectionObjectContainers.load({ connectionId, catalogId }); return this.connectionObjectContainers.get({ connectionId, catalogId })!; } diff --git a/webapp/packages/core-connections/src/ContainerResource.ts b/webapp/packages/core-connections/src/ContainerResource.ts index 7f1d1aa2d4..e44654bdeb 100644 --- a/webapp/packages/core-connections/src/ContainerResource.ts +++ b/webapp/packages/core-connections/src/ContainerResource.ts @@ -19,7 +19,11 @@ import { MetadataMap } from '@cloudbeaver/core-utils'; import { ConnectionInfoResource } from './ConnectionInfoResource'; export type ObjectContainer = Pick; -type DataValue = MetadataMap>; +export interface ICatalogData { + catalog: ObjectContainer; + schemaList: ObjectContainer[]; +} +type DataValue = MetadataMap; const defaultCatalog = 'default'; @@ -45,7 +49,7 @@ string private graphQLService: GraphQLService, private connectionInfoResource: ConnectionInfoResource ) { - super(new MetadataMap(() => ({ }))); + super(new MetadataMap(() => [])); this.metadata = new MetadataMap(() => ({ outdated: true, @@ -70,8 +74,17 @@ string ); } - get({ connectionId, catalogId }: ObjectContainerParams): ObjectContainer[] | undefined { - return this.data.get(connectionId)[catalogId ?? defaultCatalog]; + get({ connectionId, catalogId }: ObjectContainerParams): ICatalogData[] | undefined { + return this.data.get(connectionId); + } + + getCatalogData( + connectionId: string, + catalogId: string + ): ICatalogData | undefined { + const connectionData = this.data.get(connectionId); + + return connectionData.find(catalog => catalog.catalog.name === catalogId); } isLoaded({ connectionId, catalogId }: ObjectContainerParams): boolean { @@ -127,8 +140,8 @@ string connectionId, catalogId, }); - const value = this.data.get(connectionId); - value[catalogId ?? defaultCatalog] = [...navGetStructContainers.schemaList, ...navGetStructContainers.catalogList]; + + this.data.set(connectionId, navGetStructContainers.catalogList); return this.data; } diff --git a/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql b/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql index f88cb4ff99..c513f15c7e 100644 --- a/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql +++ b/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql @@ -1,16 +1,24 @@ query navGetStructContainers($connectionId: ID!, $catalogId: ID) { navGetStructContainers(connectionId: $connectionId, catalog: $catalogId) { catalogList { - name - description - type - features - } - schemaList { - name - description - type - features + catalog { + name + description + type + navNode { + id + } + features + } + schemaList { + name + description + type + navNode { + id + } + features + } } } } diff --git a/webapp/packages/core-sdk/src/sdk.ts b/webapp/packages/core-sdk/src/sdk.ts index 0406057525..1210479314 100644 --- a/webapp/packages/core-sdk/src/sdk.ts +++ b/webapp/packages/core-sdk/src/sdk.ts @@ -224,6 +224,11 @@ export interface DatabaseAuthModel { properties: ObjectPropertyInfo[]; } +export interface DatabaseCatalog { + catalog: DatabaseObjectInfo; + schemaList: DatabaseObjectInfo[]; +} + export interface DatabaseDocument { contentType?: Maybe; data?: Maybe; @@ -237,6 +242,7 @@ export interface DatabaseObjectInfo { features?: Maybe>; fullyQualifiedName?: Maybe; name?: Maybe; + navNode?: Maybe; ordinalPosition?: Maybe; overloadedName?: Maybe; properties?: Maybe>>; @@ -250,8 +256,7 @@ export interface DatabaseObjectInfoPropertiesArgs { } export interface DatabaseStructContainers { - catalogList: DatabaseObjectInfo[]; - schemaList: DatabaseObjectInfo[]; + catalogList: DatabaseCatalog[]; } export interface DriverInfo { @@ -1668,7 +1673,7 @@ export type NavGetStructContainersQueryVariables = Exact<{ catalogId?: Maybe; }>; -export interface NavGetStructContainersQuery { navGetStructContainers: { catalogList: Array<{ name?: Maybe; description?: Maybe; type?: Maybe; features?: Maybe }>; schemaList: Array<{ name?: Maybe; description?: Maybe; type?: Maybe; features?: Maybe }> } } +export interface NavGetStructContainersQuery { navGetStructContainers: { catalogList: Array<{ catalog: { name?: Maybe; description?: Maybe; type?: Maybe; features?: Maybe; navNode?: Maybe<{ id: string }> }; schemaList: Array<{ name?: Maybe; description?: Maybe; type?: Maybe; features?: Maybe; navNode?: Maybe<{ id: string }> }> }> } } export type FormatSqlQueryQueryVariables = Exact<{ connectionId: Scalars['ID']; @@ -2763,16 +2768,24 @@ export const NavGetStructContainersDocument = ` query navGetStructContainers($connectionId: ID!, $catalogId: ID) { navGetStructContainers(connectionId: $connectionId, catalog: $catalogId) { catalogList { - name - description - type - features - } - schemaList { - name - description - type - features + catalog { + name + description + type + navNode { + id + } + features + } + schemaList { + name + description + type + navNode { + id + } + features + } } } } From 86802a34dabc1201ac0b9c5dd012c03393450ebe Mon Sep 17 00:00:00 2001 From: Wroud Date: Mon, 20 Dec 2021 01:56:26 +0300 Subject: [PATCH 3/7] feat: CB-835 execution context unique id --- .../schema/service.navigator.graphqls | 6 +-- .../service/navigator/WebCatalog.java | 12 ++--- .../navigator/WebDatabaseObjectInfo.java | 9 ---- .../navigator/impl/WebServiceNavigator.java | 53 ++++++++++++------- .../service/sql/WebSQLProcessor.java | 8 ++- .../CloudbeaverServer.product.launch | 4 +- .../ConnectionExecutionContextResource.ts | 9 ++-- .../ConnectionExecutionContextService.ts | 2 +- .../IConnectionExecutionContextInfo.ts | 1 - .../core-connections/src/ContainerResource.ts | 5 +- .../database/navGetStructContainers.gql | 18 ++----- webapp/packages/core-sdk/src/sdk.ts | 28 +++------- .../src/SqlEditorTabService.ts | 15 +++--- .../src/Screen/SqlEditorScreen.tsx | 2 +- .../src/SqlEditor/SqlEditorController.tsx | 2 +- .../ExecutionPlan/SqlExecutionPlanService.ts | 2 +- .../src/SqlResultTabs/SqlQueryService.ts | 4 +- 17 files changed, 79 insertions(+), 101 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls index b2022dd4c4..ee5becd680 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls @@ -30,8 +30,6 @@ type DatabaseObjectInfo { description: String # Object type. Java class name in most cases type: String - # NavigationNodeInfo for object - navNode: NavigatorNodeInfo # Read object properties. # Optional parameter 'ids' filters properties by id. null means all properties. @@ -86,8 +84,8 @@ type NavigatorNodeInfo { } type DatabaseCatalog { - catalog: DatabaseObjectInfo! - schemaList: [ DatabaseObjectInfo! ]! + catalog: NavigatorNodeInfo! + schemaList: [ NavigatorNodeInfo! ]! } type DatabaseStructContainers { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java index 0f35772d9c..f763be9e81 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebCatalog.java @@ -30,23 +30,23 @@ public class WebCatalog { private static final Log log = Log.getLog(WebCatalog.class); - private WebDatabaseObjectInfo catalog; - private List schemaList = new ArrayList<>(); + private WebNavigatorNodeInfo catalog; + private List schemaList = new ArrayList<>(); - public WebCatalog(@NotNull WebDatabaseObjectInfo catalog) { + public WebCatalog(@NotNull WebNavigatorNodeInfo catalog) { this.catalog = catalog; } @NotNull - public WebDatabaseObjectInfo getCatalog() { + public WebNavigatorNodeInfo getCatalog() { return catalog; } - public List getSchemaList() { + public List getSchemaList() { return schemaList; } - public void setSchemaList(List schemaList) { + public void setSchemaList(List schemaList) { this.schemaList = schemaList; } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java index bc1d0dbd9b..2dce548c9e 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java @@ -55,15 +55,6 @@ public class WebDatabaseObjectInfo { // General properties /////////////////////////////////// - @Property - public WebNavigatorNodeInfo getNavNode(){ - DBNModel navigatorModel = session.getNavigatorModel(); - DBRProgressMonitor monitor = this.session.getProgressMonitor(); - DBNNode node = navigatorModel.getNodeByObject(monitor, this.object, false); - - return node == null ? null : new WebNavigatorNodeInfo(session, node); - } - @Property public String getName() { return object.getName(); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index e0a58dbc9c..017184256e 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -23,6 +23,7 @@ import io.cloudbeaver.model.WebConnectionInfo; import io.cloudbeaver.model.session.WebSession; import io.cloudbeaver.service.navigator.*; import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.DBUtils; @@ -189,30 +190,36 @@ public class WebServiceNavigator implements DBWServiceNavigator { } if(node instanceof DBSCatalog) { - WebDatabaseObjectInfo catalogObjectInfo = new WebDatabaseObjectInfo(connection.getSession(), node); - WebCatalog webCatalog = new WebCatalog(catalogObjectInfo); + WebNavigatorNodeInfo catalogObjectInfo = this.getNodeFromObject(connection.getSession(), node); - if(contextDefaults.supportsSchemaChange()) { - try { + if (catalogObjectInfo != null) { + WebCatalog webCatalog = new WebCatalog(catalogObjectInfo); - List schemaList = webCatalog.getSchemaList(); - Collection objectsCollection = ((DBSObjectContainer) node).getChildren(monitor); + if (contextDefaults.supportsSchemaChange()) { + try { + List schemaList = webCatalog.getSchemaList(); + Collection objectsCollection = ((DBSObjectContainer) node).getChildren(monitor); - for (DBSObject schemaObject : objectsCollection) { - if (!dataSource.getContainer().getNavigatorSettings().isShowSystemObjects() && DBUtils.isSystemObject(node)) { - continue; - } - if (schemaObject instanceof DBSSchema) { - schemaList.add(new WebDatabaseObjectInfo(connection.getSession(), schemaObject)); + for (DBSObject schemaObject : objectsCollection) { + if (!dataSource.getContainer().getNavigatorSettings().isShowSystemObjects() && DBUtils.isSystemObject(node)) { + continue; + } + if (schemaObject instanceof DBSSchema) { + WebNavigatorNodeInfo schemaNodeInfo = this.getNodeFromObject(connection.getSession(), schemaObject); + + if(schemaNodeInfo != null){ + schemaList.add(schemaNodeInfo); + } + } } + } catch (DBException e) { +// throw new DBWebException("Error reading schema list", e); + // TODO: we need to log some message to console } - } catch (DBException e) { -// throw new DBWebException("Error reading schema list", e); - // TODO: we need to log some message to console } - } - catalogList.add(webCatalog); + catalogList.add(webCatalog); + } } } return structContainers; @@ -236,6 +243,15 @@ public class WebServiceNavigator implements DBWServiceNavigator { return Collections.emptyList(); } + @Nullable + protected WebNavigatorNodeInfo getNodeFromObject(WebSession session, DBSObject object){ + DBNModel navigatorModel = session.getNavigatorModel(); + DBRProgressMonitor monitor = session.getProgressMonitor(); + DBNNode node = navigatorModel.getNodeByObject(monitor, object, false); + + return node == null ? null : new WebNavigatorNodeInfo(session, node); + } + @Override public String renameNode(@NotNull WebSession session, @NotNull String nodePath, @NotNull String newName) throws DBWebException { try { @@ -289,7 +305,8 @@ public class WebServiceNavigator implements DBWServiceNavigator { Map options = new LinkedHashMap<>(); for (Map.Entry ne : nodes.entrySet()) { DBSObject object = ne.getKey().getObject(); - DBCExecutionContext executionContext = getCommandExecutionContext(object); + DBPDataSource dataSource = ((DBNDatabaseNode) object).getDataSource(); + DBCExecutionContext executionContext = getCommandExecutionContext(dataSource); DBECommandContext commandContext = new WebCommandContext(executionContext, false); ne.getValue().deleteObject(commandContext, object, options); commandContext.saveChanges(session.getProgressMonitor(), options); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java index a149908f9d..3b3654e49d 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java @@ -64,8 +64,6 @@ public class WebSQLProcessor { private final SQLRuleManager ruleManager; private final Map contexts = new LinkedHashMap<>(); - private AtomicInteger contextId = new AtomicInteger(); - WebSQLProcessor(@NotNull WebSession webSession, @NotNull WebConnectionInfo connection) { this.webSession = webSession; this.connection = connection; @@ -110,10 +108,10 @@ public class WebSQLProcessor { @NotNull public WebSQLContextInfo createContext(String defaultCatalog, String defaultSchema) throws DBCException { - String contextId = String.valueOf(this.contextId.incrementAndGet()); - WebSQLContextInfo contextInfo = new WebSQLContextInfo(this, contextId, defaultCatalog, defaultSchema); + UUID uuid = UUID.randomUUID(); + WebSQLContextInfo contextInfo = new WebSQLContextInfo(this, uuid.toString(), defaultCatalog, defaultSchema); synchronized (contexts) { - contexts.put(contextId, contextInfo); + contexts.put(uuid.toString(), contextInfo); } return contextInfo; } diff --git a/server/product/web-server/CloudbeaverServer.product.launch b/server/product/web-server/CloudbeaverServer.product.launch index bb1cf93eca..71cf7c51cd 100644 --- a/server/product/web-server/CloudbeaverServer.product.launch +++ b/server/product/web-server/CloudbeaverServer.product.launch @@ -22,7 +22,7 @@ - + @@ -100,7 +100,7 @@ - + diff --git a/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts b/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts index ac47feab4c..c0f9fa9fa9 100644 --- a/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts +++ b/webapp/packages/core-connections/src/ConnectionExecutionContext/ConnectionExecutionContextResource.ts @@ -57,7 +57,7 @@ export class ConnectionExecutionContextResource extends CachedMapResource context.baseId) + )).map(context => context.id) ) ); } @@ -170,13 +170,13 @@ export class ConnectionExecutionContextResource extends CachedMapResource this.values.filter(context => context.connectionId === connectionId) - )).map(context => context.baseId) + )).map(context => context.id) ) ); } private updateContexts(...contexts: IConnectionExecutionContextInfo[]): ResourceKeyList { - const key = resourceKeyList(contexts.map(context => context.baseId)); + const key = resourceKeyList(contexts.map(context => context.id)); const oldContexts = this.get(key); this.set(key, oldContexts.map((context, i) => ({ ...context, ...contexts[i] }))); @@ -188,7 +188,6 @@ export class ConnectionExecutionContextResource extends CachedMapResource { const context = await this.connectionExecutionContextResource.create(connectionId, defaultCatalog, defaultSchema); - return this.contexts.get(context.baseId); + return this.contexts.get(context.id); } } diff --git a/webapp/packages/core-connections/src/ConnectionExecutionContext/IConnectionExecutionContextInfo.ts b/webapp/packages/core-connections/src/ConnectionExecutionContext/IConnectionExecutionContextInfo.ts index 492e838241..b51bb4d588 100644 --- a/webapp/packages/core-connections/src/ConnectionExecutionContext/IConnectionExecutionContextInfo.ts +++ b/webapp/packages/core-connections/src/ConnectionExecutionContext/IConnectionExecutionContextInfo.ts @@ -9,5 +9,4 @@ import type { SqlContextInfo } from '@cloudbeaver/core-sdk'; export interface IConnectionExecutionContextInfo extends SqlContextInfo { - baseId: string; } diff --git a/webapp/packages/core-connections/src/ContainerResource.ts b/webapp/packages/core-connections/src/ContainerResource.ts index e44654bdeb..8c1acc7263 100644 --- a/webapp/packages/core-connections/src/ContainerResource.ts +++ b/webapp/packages/core-connections/src/ContainerResource.ts @@ -12,13 +12,13 @@ import { injectable } from '@cloudbeaver/core-di'; import { GraphQLService, CachedDataResource, - DatabaseObjectInfo, ICachedResourceMetadata, ResourceKeyUtils, CachedMapAllKey + NavNodeInfoFragment, ICachedResourceMetadata, ResourceKeyUtils, CachedMapAllKey } from '@cloudbeaver/core-sdk'; import { MetadataMap } from '@cloudbeaver/core-utils'; import { ConnectionInfoResource } from './ConnectionInfoResource'; -export type ObjectContainer = Pick; +export type ObjectContainer = NavNodeInfoFragment; export interface ICatalogData { catalog: ObjectContainer; schemaList: ObjectContainer[]; @@ -139,6 +139,7 @@ string const { navGetStructContainers } = await this.graphQLService.sdk.navGetStructContainers({ connectionId, catalogId, + withDetails: false, }); this.data.set(connectionId, navGetStructContainers.catalogList); diff --git a/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql b/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql index c513f15c7e..02ac0053eb 100644 --- a/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql +++ b/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql @@ -1,23 +1,11 @@ -query navGetStructContainers($connectionId: ID!, $catalogId: ID) { +query navGetStructContainers($connectionId: ID!, $catalogId: ID, $withDetails: Boolean!) { navGetStructContainers(connectionId: $connectionId, catalog: $catalogId) { catalogList { catalog { - name - description - type - navNode { - id - } - features + ...NavNodeInfo } schemaList { - name - description - type - navNode { - id - } - features + ...NavNodeInfo } } } diff --git a/webapp/packages/core-sdk/src/sdk.ts b/webapp/packages/core-sdk/src/sdk.ts index afe9653385..fa7a17959d 100644 --- a/webapp/packages/core-sdk/src/sdk.ts +++ b/webapp/packages/core-sdk/src/sdk.ts @@ -225,8 +225,8 @@ export interface DatabaseAuthModel { } export interface DatabaseCatalog { - catalog: DatabaseObjectInfo; - schemaList: DatabaseObjectInfo[]; + catalog: NavigatorNodeInfo; + schemaList: NavigatorNodeInfo[]; } export interface DatabaseDocument { @@ -242,7 +242,6 @@ export interface DatabaseObjectInfo { features?: Maybe>; fullyQualifiedName?: Maybe; name?: Maybe; - navNode?: Maybe; ordinalPosition?: Maybe; overloadedName?: Maybe; properties?: Maybe>>; @@ -1672,9 +1671,10 @@ export interface RemoveDataTransferFileQuery { result?: Maybe } export type NavGetStructContainersQueryVariables = Exact<{ connectionId: Scalars['ID']; catalogId?: Maybe; + withDetails: Scalars['Boolean']; }>; -export interface NavGetStructContainersQuery { navGetStructContainers: { catalogList: Array<{ catalog: { name?: Maybe; description?: Maybe; type?: Maybe; features?: Maybe; navNode?: Maybe<{ id: string }> }; schemaList: Array<{ name?: Maybe; description?: Maybe; type?: Maybe; features?: Maybe; navNode?: Maybe<{ id: string }> }> }> } } +export interface NavGetStructContainersQuery { navGetStructContainers: { catalogList: Array<{ catalog: { id: string; name?: Maybe; hasChildren?: Maybe; nodeType?: Maybe; icon?: Maybe; folder?: Maybe; inline?: Maybe; navigable?: Maybe; features?: Maybe; object?: Maybe<{ features?: Maybe }>; nodeDetails?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>> }; schemaList: Array<{ id: string; name?: Maybe; hasChildren?: Maybe; nodeType?: Maybe; icon?: Maybe; folder?: Maybe; inline?: Maybe; navigable?: Maybe; features?: Maybe; object?: Maybe<{ features?: Maybe }>; nodeDetails?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>> }> }> } } export type FormatSqlQueryQueryVariables = Exact<{ connectionId: Scalars['ID']; @@ -2766,31 +2766,19 @@ export const RemoveDataTransferFileDocument = ` } `; export const NavGetStructContainersDocument = ` - query navGetStructContainers($connectionId: ID!, $catalogId: ID) { + query navGetStructContainers($connectionId: ID!, $catalogId: ID, $withDetails: Boolean!) { navGetStructContainers(connectionId: $connectionId, catalog: $catalogId) { catalogList { catalog { - name - description - type - navNode { - id - } - features + ...NavNodeInfo } schemaList { - name - description - type - navNode { - id - } - features + ...NavNodeInfo } } } } - `; + ${NavNodeInfoFragmentDoc}`; export const FormatSqlQueryDocument = ` query formatSqlQuery($connectionId: ID!, $contextId: ID!, $query: String!) { query: sqlFormatQuery( diff --git a/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts b/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts index 619887efc3..ad34c9e73a 100644 --- a/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts +++ b/webapp/packages/plugin-sql-editor-navigation-tab/src/SqlEditorTabService.ts @@ -103,7 +103,7 @@ export class SqlEditorTabService extends Bootstrap { ); for (const tab of tabs) { - const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext!.baseId); + const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext!.id); if (!executionContext?.context) { this.resetConnectionInfo(tab.handlerState); @@ -119,7 +119,7 @@ export class SqlEditorTabService extends Bootstrap { ); for (const tab of tabs) { - if (ResourceKeyUtils.includes(key, tab.handlerState.executionContext!.baseId)) { + if (ResourceKeyUtils.includes(key, tab.handlerState.executionContext!.id)) { this.resetConnectionInfo(tab.handlerState); } } @@ -137,7 +137,6 @@ export class SqlEditorTabService extends Bootstrap { || !['undefined', 'object'].includes(typeof tab.handlerState.executionContext) || !['string', 'undefined', 'object'].includes(typeof tab.handlerState.executionContext?.connectionId) || !['string', 'undefined', 'object'].includes(typeof tab.handlerState.executionContext?.id) - || !['string', 'undefined', 'object'].includes(typeof tab.handlerState.executionContext?.baseId) || !['string', 'undefined', 'object'].includes(typeof tab.handlerState.executionContext?.defaultCatalog) || !['string', 'undefined', 'object'].includes(typeof tab.handlerState.executionContext?.defaultSchema) || !['string', 'undefined', 'object'].includes(typeof tab.handlerState.currentTabId) @@ -153,7 +152,7 @@ export class SqlEditorTabService extends Bootstrap { if (tab.handlerState.executionContext) { await this.connectionInfo.load(CachedMapAllKey); await this.connectionExecutionContextResource.loadAll(); - const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext.baseId); + const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext.id); if (!executionContext) { this.resetConnectionInfo(tab.handlerState); @@ -210,7 +209,7 @@ export class SqlEditorTabService extends Bootstrap { return false; } - const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext.baseId); + const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext.id); if (!executionContext) { return false; @@ -234,7 +233,7 @@ export class SqlEditorTabService extends Bootstrap { return false; } - const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext.baseId); + const executionContext = this.connectionExecutionContextService.get(tab.handlerState.executionContext.id); if (!executionContext) { return false; @@ -266,13 +265,13 @@ export class SqlEditorTabService extends Bootstrap { } private async destroyContext(contextInfo: IConnectionExecutionContextInfo) { - const executionContext = this.connectionExecutionContextService.get(contextInfo.baseId); + const executionContext = this.connectionExecutionContextService.get(contextInfo.id); if (executionContext) { try { await executionContext.destroy(); } catch (exception) { - this.notificationService.logException(exception, `Failed to destroy SQL-context ${executionContext.context?.baseId}`, '', true); + this.notificationService.logException(exception, `Failed to destroy SQL-context ${executionContext.context?.id}`, '', true); } } } diff --git a/webapp/packages/plugin-sql-editor-screen/src/Screen/SqlEditorScreen.tsx b/webapp/packages/plugin-sql-editor-screen/src/Screen/SqlEditorScreen.tsx index 8998fd3873..e27eb77697 100644 --- a/webapp/packages/plugin-sql-editor-screen/src/Screen/SqlEditorScreen.tsx +++ b/webapp/packages/plugin-sql-editor-screen/src/Screen/SqlEditorScreen.tsx @@ -49,7 +49,7 @@ export const SqlEditorScreen: ScreenComponent = observer }, }), { state: observable }, false); - if (context?.context?.baseId !== state.state?.executionContext?.baseId) { + if (context?.context?.id !== state.state?.executionContext?.id) { state.setState(context?.context); } diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorController.tsx b/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorController.tsx index 211fcaf0f3..d1bcb4d1a1 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorController.tsx +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorController.tsx @@ -61,7 +61,7 @@ export class SqlEditorController implements IInitializableController, IDestructi return true; } - const context = this.connectionExecutionContextService.get(this.state.executionContext.baseId); + const context = this.connectionExecutionContextService.get(this.state.executionContext.id); return context?.executing || false; } diff --git a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/ExecutionPlan/SqlExecutionPlanService.ts b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/ExecutionPlan/SqlExecutionPlanService.ts index 5ae8bf3bda..4992714e84 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/ExecutionPlan/SqlExecutionPlanService.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/ExecutionPlan/SqlExecutionPlanService.ts @@ -45,7 +45,7 @@ export class SqlExecutionPlanService { ): Promise { const contextInfo = editorState.executionContext; - const executionContext = contextInfo && this.connectionExecutionContextService.get(contextInfo.baseId); + const executionContext = contextInfo && this.connectionExecutionContextService.get(contextInfo.id); if (!contextInfo || !executionContext) { console.error('executeExecutionPlan executionContext is not provided'); diff --git a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts index 135e518a68..c4023ed339 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts @@ -61,7 +61,7 @@ export class SqlQueryService { inNewTab: boolean ): Promise { const contextInfo = editorState.executionContext; - const executionContext = contextInfo && this.connectionExecutionContextService.get(contextInfo.baseId); + const executionContext = contextInfo && this.connectionExecutionContextService.get(contextInfo.id); if (!contextInfo || !executionContext) { console.error('executeEditorQuery executionContext is not provided'); @@ -126,7 +126,7 @@ export class SqlQueryService { options?: IQueryExecutionOptions ): Promise { const contextInfo = editorState.executionContext; - const executionContext = contextInfo && this.connectionExecutionContextService.get(contextInfo.baseId); + const executionContext = contextInfo && this.connectionExecutionContextService.get(contextInfo.id); if (!contextInfo || !executionContext) { console.error('executeEditorQuery executionContext is not provided'); From d58fc57a2ffbeb559b892743d146f0f6def9609c Mon Sep 17 00:00:00 2001 From: Wroud Date: Mon, 20 Dec 2021 02:07:15 +0300 Subject: [PATCH 4/7] fix: CB-835 revert extra changes --- .../service/navigator/impl/WebServiceNavigator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index 017184256e..500b717ce6 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -305,8 +305,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { Map options = new LinkedHashMap<>(); for (Map.Entry ne : nodes.entrySet()) { DBSObject object = ne.getKey().getObject(); - DBPDataSource dataSource = ((DBNDatabaseNode) object).getDataSource(); - DBCExecutionContext executionContext = getCommandExecutionContext(dataSource); + DBCExecutionContext executionContext = getCommandExecutionContext(object); DBECommandContext commandContext = new WebCommandContext(executionContext, false); ne.getValue().deleteObject(commandContext, object, options); commandContext.saveChanges(session.getProgressMonitor(), options); From d462ccd5cc4805435dca32890c25b227d2894f9c Mon Sep 17 00:00:00 2001 From: Wroud Date: Mon, 20 Dec 2021 02:18:33 +0300 Subject: [PATCH 5/7] chore: CB-835 revert product.launch changes --- server/product/web-server/CloudbeaverServer.product.launch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/product/web-server/CloudbeaverServer.product.launch b/server/product/web-server/CloudbeaverServer.product.launch index 71cf7c51cd..a9f494220f 100644 --- a/server/product/web-server/CloudbeaverServer.product.launch +++ b/server/product/web-server/CloudbeaverServer.product.launch @@ -22,7 +22,7 @@ - + From f803d76b59eb75fd5d126da45f40813006aeb932 Mon Sep 17 00:00:00 2001 From: Wroud Date: Wed, 22 Dec 2021 16:34:55 +0300 Subject: [PATCH 6/7] chore: CB-1363 remove unnecessary changes --- .../cloudbeaver/service/navigator/WebDatabaseObjectInfo.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java index 2dce548c9e..381da845af 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebDatabaseObjectInfo.java @@ -16,17 +16,13 @@ */ package io.cloudbeaver.service.navigator; -import io.cloudbeaver.DBWebException; import io.cloudbeaver.model.WebPropertyInfo; import io.cloudbeaver.model.session.WebSession; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.*; import org.jkiss.dbeaver.model.meta.Property; -import org.jkiss.dbeaver.model.navigator.DBNModel; -import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor; -import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.*; import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; import org.jkiss.dbeaver.model.struct.rdb.DBSSchema; From 3aee2fc4310d6707b82c6bafd46a1640587bd117 Mon Sep 17 00:00:00 2001 From: Wroud Date: Wed, 22 Dec 2021 17:49:48 +0300 Subject: [PATCH 7/7] fix: CB-1363 schema base databases support --- .../schema/service.navigator.graphqls | 3 + .../navigator/WebStructContainers.java | 16 + .../navigator/impl/WebServiceNavigator.java | 14 +- .../ConnectionSchemaManagerService.ts | 4 +- .../ConnectionSelectorController.ts | 23 +- .../src/ConnectionsManagerService.ts | 8 +- .../core-connections/src/ContainerResource.ts | 32 +- .../database/navGetStructContainers.gql | 5 + webapp/packages/core-sdk/src/sdk.ts | 405 +++++++++--------- 9 files changed, 296 insertions(+), 214 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls index ee5becd680..94d57bdc49 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls @@ -90,6 +90,9 @@ type DatabaseCatalog { type DatabaseStructContainers { catalogList: [ DatabaseCatalog! ]! + schemaList: [ NavigatorNodeInfo! ]! + supportsCatalogChange: Boolean! + supportsSchemaChange: Boolean! } #################################################### diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java index 5b3113efad..8737fdcc52 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebStructContainers.java @@ -30,12 +30,28 @@ public class WebStructContainers { private static final Log log = Log.getLog(WebStructContainers.class); private List catalogList = new ArrayList<>(); + private List schemaList = new ArrayList<>(); + private boolean supportsCatalogChange = false; + private boolean supportsSchemaChange = false; public List getCatalogList() { return catalogList; } + public List getSchemaList() { + return schemaList; + } public void setCatalogList(List catalogList) { this.catalogList = catalogList; } + public void setSchemaList(List schemaList) { + this.schemaList = schemaList; + } + + public void setSupportsCatalogChange(boolean support) { + this.supportsCatalogChange = support; + } + public void setSupportsSchemaChange(boolean support) { + this.supportsSchemaChange = support; + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index 500b717ce6..7f948c489a 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -176,6 +176,9 @@ public class WebServiceNavigator implements DBWServiceNavigator { WebStructContainers structContainers = new WebStructContainers(); + structContainers.setSupportsCatalogChange(contextDefaults.supportsCatalogChange()); + structContainers.setSupportsSchemaChange(contextDefaults.supportsSchemaChange()); + List nodes = this.getCatalogs( monitor, connection.getDataSourceContainer().getDataSource(), @@ -183,6 +186,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { ); List catalogList = structContainers.getCatalogList(); + List schemaList = structContainers.getSchemaList(); for (DBSObject node : nodes) { if (!dataSource.getContainer().getNavigatorSettings().isShowSystemObjects() && DBUtils.isSystemObject(node)) { @@ -197,7 +201,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { if (contextDefaults.supportsSchemaChange()) { try { - List schemaList = webCatalog.getSchemaList(); + List schemasList = webCatalog.getSchemaList(); Collection objectsCollection = ((DBSObjectContainer) node).getChildren(monitor); for (DBSObject schemaObject : objectsCollection) { @@ -208,7 +212,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { WebNavigatorNodeInfo schemaNodeInfo = this.getNodeFromObject(connection.getSession(), schemaObject); if(schemaNodeInfo != null){ - schemaList.add(schemaNodeInfo); + schemasList.add(schemaNodeInfo); } } } @@ -220,6 +224,12 @@ public class WebServiceNavigator implements DBWServiceNavigator { catalogList.add(webCatalog); } + } else if(node instanceof DBSSchema && contextDefaults.supportsSchemaChange()) { + WebNavigatorNodeInfo schemaNodeInfo = this.getNodeFromObject(connection.getSession(), node); + + if(schemaNodeInfo != null){ + schemaList.add(schemaNodeInfo); + } } } return structContainers; diff --git a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts index cab264961e..0482ddf7f1 100644 --- a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts +++ b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts @@ -14,7 +14,7 @@ import { ObjectContainer, DBDriverResource, isConnectionProvider, IConnectionProvider, - isConnectionSetter, IConnectionSetter, ICatalogData + isConnectionSetter, IConnectionSetter, IStructContainers } from '@cloudbeaver/core-connections'; import { Bootstrap, injectable } from '@cloudbeaver/core-di'; import { NotificationService } from '@cloudbeaver/core-events'; @@ -90,7 +90,7 @@ export class ConnectionSchemaManagerService extends Bootstrap { ); } - get objectContainerList(): ICatalogData[] | undefined { + get objectContainerList(): IStructContainers | undefined { if (!this.currentConnectionId) { return; } diff --git a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts index 5c1de72ab1..fa3ad1fb7e 100644 --- a/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts +++ b/webapp/packages/core-app/src/TopNavBar/ConnectionSchemaManager/ConnectionSelector/ConnectionSelectorController.ts @@ -66,6 +66,10 @@ export class ConnectionSelectorController { this.connectionSelectorService.currentObjectSchemaId !== undefined || this.connectionSelectorService.currentObjectCatalogId !== undefined ) + && ( + !!this.connectionSelectorService.objectContainerList?.supportsCatalogChange + || !!this.connectionSelectorService.objectContainerList?.supportsSchemaChange + ) ); } @@ -180,7 +184,24 @@ export class ConnectionSelectorController { const items: IMenuItem[] = []; - for (const catalogData of this.connectionSelectorService.objectContainerList) { + for (const schema of this.connectionSelectorService.objectContainerList.schemaList) { + if (!schema.name) { + continue; + } + + const title = schema.name; + + items.push({ + id: title, + title, + icon: 'schema_system', + onClick: async () => { + await this.connectionSelectorService.selectSchema(schema.name!); + }, + }); + } + + for (const catalogData of this.connectionSelectorService.objectContainerList.catalogList) { const catalog = catalogData.catalog; if (!catalog.name) { continue; diff --git a/webapp/packages/core-connections/src/ConnectionsManagerService.ts b/webapp/packages/core-connections/src/ConnectionsManagerService.ts index 6057ad4172..abced2bedb 100644 --- a/webapp/packages/core-connections/src/ConnectionsManagerService.ts +++ b/webapp/packages/core-connections/src/ConnectionsManagerService.ts @@ -13,7 +13,7 @@ import { NotificationService } from '@cloudbeaver/core-events'; import { Executor, IExecutor } from '@cloudbeaver/core-executor'; import { ConnectionInfoResource, Connection } from './ConnectionInfoResource'; -import { ContainerResource, ICatalogData, ObjectContainer } from './ContainerResource'; +import { ContainerResource, IStructContainers, ObjectContainer } from './ContainerResource'; import { EConnectionFeature } from './EConnectionFeature'; @injectable() @@ -25,8 +25,8 @@ export class ConnectionsManagerService { constructor( readonly connectionInfo: ConnectionInfoResource, readonly connectionObjectContainers: ContainerResource, - private notificationService: NotificationService, - private commonDialogService: CommonDialogService + private readonly notificationService: NotificationService, + private readonly commonDialogService: CommonDialogService ) { this.disconnecting = false; this.connectionExecutor = new Executor(null, (active, current) => active === current); @@ -130,7 +130,7 @@ export class ConnectionsManagerService { } } - async loadObjectContainer(connectionId: string, catalogId?: string): Promise { + async loadObjectContainer(connectionId: string, catalogId?: string): Promise { await this.connectionObjectContainers.load({ connectionId, catalogId }); return this.connectionObjectContainers.get({ connectionId, catalogId })!; } diff --git a/webapp/packages/core-connections/src/ContainerResource.ts b/webapp/packages/core-connections/src/ContainerResource.ts index 8c1acc7263..597f0ff72d 100644 --- a/webapp/packages/core-connections/src/ContainerResource.ts +++ b/webapp/packages/core-connections/src/ContainerResource.ts @@ -23,7 +23,15 @@ export interface ICatalogData { catalog: ObjectContainer; schemaList: ObjectContainer[]; } -type DataValue = MetadataMap; + +export interface IStructContainers { + catalogList: ICatalogData[]; + schemaList: ObjectContainer[]; + supportsCatalogChange: boolean; + supportsSchemaChange: boolean; +} + +type DataValue = MetadataMap; const defaultCatalog = 'default'; @@ -46,10 +54,15 @@ string metadata: MetadataMap; constructor( - private graphQLService: GraphQLService, - private connectionInfoResource: ConnectionInfoResource + private readonly graphQLService: GraphQLService, + private readonly connectionInfoResource: ConnectionInfoResource ) { - super(new MetadataMap(() => [])); + super(new MetadataMap(() => ({ + catalogList: [], + schemaList: [], + supportsCatalogChange: false, + supportsSchemaChange: false, + }))); this.metadata = new MetadataMap(() => ({ outdated: true, @@ -74,7 +87,7 @@ string ); } - get({ connectionId, catalogId }: ObjectContainerParams): ICatalogData[] | undefined { + get({ connectionId, catalogId }: ObjectContainerParams): IStructContainers | undefined { return this.data.get(connectionId); } @@ -84,7 +97,7 @@ string ): ICatalogData | undefined { const connectionData = this.data.get(connectionId); - return connectionData.find(catalog => catalog.catalog.name === catalogId); + return connectionData.catalogList.find(catalog => catalog.catalog.name === catalogId); } isLoaded({ connectionId, catalogId }: ObjectContainerParams): boolean { @@ -142,7 +155,12 @@ string withDetails: false, }); - this.data.set(connectionId, navGetStructContainers.catalogList); + this.data.set(connectionId, { + catalogList: navGetStructContainers.catalogList, + schemaList: navGetStructContainers.schemaList, + supportsCatalogChange: navGetStructContainers.supportsCatalogChange, + supportsSchemaChange: navGetStructContainers.supportsSchemaChange, + }); return this.data; } diff --git a/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql b/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql index 02ac0053eb..df35653ca3 100644 --- a/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql +++ b/webapp/packages/core-sdk/src/queries/database/navGetStructContainers.gql @@ -8,5 +8,10 @@ query navGetStructContainers($connectionId: ID!, $catalogId: ID, $withDetails: B ...NavNodeInfo } } + schemaList { + ...NavNodeInfo + } + supportsCatalogChange + supportsSchemaChange } } diff --git a/webapp/packages/core-sdk/src/sdk.ts b/webapp/packages/core-sdk/src/sdk.ts index 81513f56f3..bbaeff3cc0 100644 --- a/webapp/packages/core-sdk/src/sdk.ts +++ b/webapp/packages/core-sdk/src/sdk.ts @@ -227,7 +227,7 @@ export interface DatabaseAuthModel { export interface DatabaseCatalog { catalog: NavigatorNodeInfo; - schemaList: NavigatorNodeInfo[]; + schemaList: Array; } export interface DatabaseDocument { @@ -257,7 +257,10 @@ export interface DatabaseObjectInfoPropertiesArgs { } export interface DatabaseStructContainers { - catalogList: DatabaseCatalog[]; + catalogList: Array; + schemaList: Array; + supportsCatalogChange: Scalars['Boolean']; + supportsSchemaChange: Scalars['Boolean']; } export interface DriverInfo { @@ -1826,11 +1829,12 @@ export type RemoveDataTransferFileQuery = { result?: boolean }; export type NavGetStructContainersQueryVariables = Exact<{ connectionId: Scalars['ID']; - catalogId?: Maybe; + catalogId?: InputMaybe; withDetails: Scalars['Boolean']; }>; -export interface NavGetStructContainersQuery { navGetStructContainers: { catalogList: Array<{ catalog: { id: string; name?: Maybe; hasChildren?: Maybe; nodeType?: Maybe; icon?: Maybe; folder?: Maybe; inline?: Maybe; navigable?: Maybe; features?: Maybe; object?: Maybe<{ features?: Maybe }>; nodeDetails?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>> }; schemaList: Array<{ id: string; name?: Maybe; hasChildren?: Maybe; nodeType?: Maybe; icon?: Maybe; folder?: Maybe; inline?: Maybe; navigable?: Maybe; features?: Maybe; object?: Maybe<{ features?: Maybe }>; nodeDetails?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>> }> }> } } + +export type NavGetStructContainersQuery = { navGetStructContainers: { supportsCatalogChange: boolean; supportsSchemaChange: boolean; catalogList: Array<{ catalog: { id: string; name?: string; hasChildren?: boolean; nodeType?: string; icon?: string; folder?: boolean; inline?: boolean; navigable?: boolean; features?: Array; object?: { features?: Array }; nodeDetails?: Array<{ id?: string; category?: string; dataType?: string; description?: string; displayName?: string; length: ObjectPropertyLength; features: Array; value?: any; order: number }> }; schemaList: Array<{ id: string; name?: string; hasChildren?: boolean; nodeType?: string; icon?: string; folder?: boolean; inline?: boolean; navigable?: boolean; features?: Array; object?: { features?: Array }; nodeDetails?: Array<{ id?: string; category?: string; dataType?: string; description?: string; displayName?: string; length: ObjectPropertyLength; features: Array; value?: any; order: number }> }> }>; schemaList: Array<{ id: string; name?: string; hasChildren?: boolean; nodeType?: string; icon?: string; folder?: boolean; inline?: boolean; navigable?: boolean; features?: Array; object?: { features?: Array }; nodeDetails?: Array<{ id?: string; category?: string; dataType?: string; description?: string; displayName?: string; length: ObjectPropertyLength; features: Array; value?: any; order: number }> }> } }; export type FormatSqlQueryQueryVariables = Exact<{ connectionId: Scalars['ID']; @@ -1857,9 +1861,9 @@ export type DatabaseConnectionFragment = { id: string; name: string; description export type DatabaseDriverFragment = { id: string; name?: string; icon?: string; description?: string; defaultPort?: string; defaultDatabase?: string; defaultServer?: string; defaultUser?: string; sampleURL?: string; embedded?: boolean; anonymousAccess?: boolean; promotedScore?: number; defaultAuthModel: string; applicableNetworkHandlers: Array; driverParameters?: any; providerProperties?: Array<{ id?: string; displayName?: string; description?: string; category?: string; dataType?: string; defaultValue?: any; validValues?: Array; length: ObjectPropertyLength; features: Array; order: number }>; driverProperties?: Array<{ id?: string; displayName?: string; description?: string; category?: string; dataType?: string; defaultValue?: any; validValues?: Array }> }; -export interface ExecutionContextInfoFragment { id: string; connectionId: string; defaultCatalog?: Maybe; defaultSchema?: Maybe } +export type ExecutionContextInfoFragment = { id: string; connectionId: string; defaultCatalog?: string; defaultSchema?: string }; -export interface NavNodeDbObjectInfoFragment { id: string; object?: Maybe<{ type?: Maybe; features?: Maybe; properties?: Maybe; category?: Maybe; dataType?: Maybe; description?: Maybe; displayName?: Maybe; length: ObjectPropertyLength; features: string[]; value?: Maybe; order: number }>>> }> } +export type NavNodeDbObjectInfoFragment = { id: string; object?: { type?: string; features?: Array; properties?: Array<{ id?: string; category?: string; dataType?: string; description?: string; displayName?: string; length: ObjectPropertyLength; features: Array; value?: any; order: number }> } }; export type NavNodeInfoFragment = { id: string; name?: string; hasChildren?: boolean; nodeType?: string; icon?: string; folder?: boolean; inline?: boolean; navigable?: boolean; features?: Array; object?: { features?: Array }; nodeDetails?: Array<{ id?: string; category?: string; dataType?: string; description?: string; displayName?: string; length: ObjectPropertyLength; features: Array; value?: any; order: number }> }; @@ -2965,6 +2969,11 @@ export const NavGetStructContainersDocument = ` ...NavNodeInfo } } + schemaList { + ...NavNodeInfo + } + supportsCatalogChange + supportsSchemaChange } } ${NavNodeInfoFragmentDoc}`; @@ -3382,293 +3391,293 @@ const defaultWrapper: SdkFunctionWrapper = (action, _operationName) => action(); export function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) { return { - asyncTaskCancel(variables: AsyncTaskCancelMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AsyncTaskCancelDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'asyncTaskCancel'); + asyncTaskCancel(variables: AsyncTaskCancelMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AsyncTaskCancelDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'asyncTaskCancel'); }, - createRole(variables: CreateRoleQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateRoleDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createRole'); + createRole(variables: CreateRoleQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateRoleDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createRole'); }, - deleteRole(variables: DeleteRoleQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DeleteRoleDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'deleteRole'); + deleteRole(variables: DeleteRoleQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DeleteRoleDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'deleteRole'); }, - getRoleGrantedUsers(variables: GetRoleGrantedUsersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetRoleGrantedUsersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getRoleGrantedUsers'); + getRoleGrantedUsers(variables: GetRoleGrantedUsersQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetRoleGrantedUsersDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getRoleGrantedUsers'); }, - getRolesList(variables?: GetRolesListQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetRolesListDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getRolesList'); + getRolesList(variables?: GetRolesListQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetRolesListDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getRolesList'); }, - updateRole(variables: UpdateRoleQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(UpdateRoleDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'updateRole'); + updateRole(variables: UpdateRoleQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(UpdateRoleDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'updateRole'); }, - authChangeLocalPassword(variables: AuthChangeLocalPasswordQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AuthChangeLocalPasswordDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'authChangeLocalPassword'); + authChangeLocalPassword(variables: AuthChangeLocalPasswordQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AuthChangeLocalPasswordDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'authChangeLocalPassword'); }, - authLogin(variables: AuthLoginQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AuthLoginDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'authLogin'); + authLogin(variables: AuthLoginQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AuthLoginDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'authLogin'); }, - authLogout(variables?: AuthLogoutQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AuthLogoutDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'authLogout'); + authLogout(variables?: AuthLogoutQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AuthLogoutDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'authLogout'); }, - deleteAuthProviderConfiguration(variables: DeleteAuthProviderConfigurationQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DeleteAuthProviderConfigurationDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'deleteAuthProviderConfiguration'); + deleteAuthProviderConfiguration(variables: DeleteAuthProviderConfigurationQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DeleteAuthProviderConfigurationDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'deleteAuthProviderConfiguration'); }, - getActiveUser(variables: GetActiveUserQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetActiveUserDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getActiveUser'); + getActiveUser(variables: GetActiveUserQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetActiveUserDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getActiveUser'); }, - getAuthProviderConfigurationParameters(variables: GetAuthProviderConfigurationParametersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetAuthProviderConfigurationParametersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getAuthProviderConfigurationParameters'); + getAuthProviderConfigurationParameters(variables: GetAuthProviderConfigurationParametersQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetAuthProviderConfigurationParametersDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getAuthProviderConfigurationParameters'); }, - getAuthProviderConfigurations(variables?: GetAuthProviderConfigurationsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetAuthProviderConfigurationsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getAuthProviderConfigurations'); + getAuthProviderConfigurations(variables?: GetAuthProviderConfigurationsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetAuthProviderConfigurationsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getAuthProviderConfigurations'); }, - getAuthProviders(variables?: GetAuthProvidersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetAuthProvidersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getAuthProviders'); + getAuthProviders(variables?: GetAuthProvidersQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetAuthProvidersDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getAuthProviders'); }, - getUserProfileProperties(variables?: GetUserProfilePropertiesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetUserProfilePropertiesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getUserProfileProperties'); + getUserProfileProperties(variables?: GetUserProfilePropertiesQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetUserProfilePropertiesDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getUserProfileProperties'); }, - saveAuthProviderConfiguration(variables: SaveAuthProviderConfigurationQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SaveAuthProviderConfigurationDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'saveAuthProviderConfiguration'); + saveAuthProviderConfiguration(variables: SaveAuthProviderConfigurationQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SaveAuthProviderConfigurationDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'saveAuthProviderConfiguration'); }, - saveUserMetaParameters(variables: SaveUserMetaParametersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SaveUserMetaParametersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'saveUserMetaParameters'); + saveUserMetaParameters(variables: SaveUserMetaParametersQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SaveUserMetaParametersDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'saveUserMetaParameters'); }, - createUser(variables: CreateUserQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateUserDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createUser'); + createUser(variables: CreateUserQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateUserDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createUser'); }, - deleteUser(variables: DeleteUserQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DeleteUserDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'deleteUser'); + deleteUser(variables: DeleteUserQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DeleteUserDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'deleteUser'); }, - deleteUserMetaParameter(variables: DeleteUserMetaParameterQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DeleteUserMetaParameterDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'deleteUserMetaParameter'); + deleteUserMetaParameter(variables: DeleteUserMetaParameterQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DeleteUserMetaParameterDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'deleteUserMetaParameter'); }, - getPermissionsList(variables?: GetPermissionsListQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetPermissionsListDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getPermissionsList'); + getPermissionsList(variables?: GetPermissionsListQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetPermissionsListDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getPermissionsList'); }, - getUserGrantedConnections(variables?: GetUserGrantedConnectionsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetUserGrantedConnectionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getUserGrantedConnections'); + getUserGrantedConnections(variables?: GetUserGrantedConnectionsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetUserGrantedConnectionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getUserGrantedConnections'); }, - getUsersList(variables: GetUsersListQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetUsersListDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getUsersList'); + getUsersList(variables: GetUsersListQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetUsersListDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getUsersList'); }, - grantUserRole(variables: GrantUserRoleQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GrantUserRoleDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'grantUserRole'); + grantUserRole(variables: GrantUserRoleQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GrantUserRoleDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'grantUserRole'); }, - revokeUserRole(variables: RevokeUserRoleQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(RevokeUserRoleDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'revokeUserRole'); + revokeUserRole(variables: RevokeUserRoleQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(RevokeUserRoleDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'revokeUserRole'); }, - setConnections(variables: SetConnectionsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetConnectionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setConnections'); + setConnections(variables: SetConnectionsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetConnectionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setConnections'); }, - setUserCredentials(variables: SetUserCredentialsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetUserCredentialsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setUserCredentials'); + setUserCredentials(variables: SetUserCredentialsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetUserCredentialsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setUserCredentials'); }, - setUserMetaParameter(variables: SetUserMetaParameterQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetUserMetaParameterDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setUserMetaParameter'); + setUserMetaParameter(variables: SetUserMetaParameterQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetUserMetaParameterDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setUserMetaParameter'); }, - updateUserProfileProperties(variables: UpdateUserProfilePropertiesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(UpdateUserProfilePropertiesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'updateUserProfileProperties'); + updateUserProfileProperties(variables: UpdateUserProfilePropertiesQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(UpdateUserProfilePropertiesDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'updateUserProfileProperties'); }, - createConnectionConfiguration(variables: CreateConnectionConfigurationQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionConfigurationDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createConnectionConfiguration'); + createConnectionConfiguration(variables: CreateConnectionConfigurationQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionConfigurationDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createConnectionConfiguration'); }, - createConnectionConfigurationFromNode(variables: CreateConnectionConfigurationFromNodeQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionConfigurationFromNodeDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createConnectionConfigurationFromNode'); + createConnectionConfigurationFromNode(variables: CreateConnectionConfigurationFromNodeQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionConfigurationFromNodeDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createConnectionConfigurationFromNode'); }, - deleteConnectionConfiguration(variables: DeleteConnectionConfigurationQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DeleteConnectionConfigurationDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'deleteConnectionConfiguration'); + deleteConnectionConfiguration(variables: DeleteConnectionConfigurationQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DeleteConnectionConfigurationDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'deleteConnectionConfiguration'); }, - getConnectionAccess(variables?: GetConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetConnectionAccessDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getConnectionAccess'); + getConnectionAccess(variables?: GetConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetConnectionAccessDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getConnectionAccess'); }, - getConnections(variables: GetConnectionsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetConnectionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getConnections'); + getConnections(variables: GetConnectionsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetConnectionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getConnections'); }, - getSubjectConnectionAccess(variables?: GetSubjectConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetSubjectConnectionAccessDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getSubjectConnectionAccess'); + getSubjectConnectionAccess(variables?: GetSubjectConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetSubjectConnectionAccessDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getSubjectConnectionAccess'); }, - searchDatabases(variables: SearchDatabasesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SearchDatabasesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'searchDatabases'); + searchDatabases(variables: SearchDatabasesQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SearchDatabasesDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'searchDatabases'); }, - setConnectionAccess(variables: SetConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetConnectionAccessDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setConnectionAccess'); + setConnectionAccess(variables: SetConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetConnectionAccessDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setConnectionAccess'); }, - setSubjectConnectionAccess(variables: SetSubjectConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetSubjectConnectionAccessDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setSubjectConnectionAccess'); + setSubjectConnectionAccess(variables: SetSubjectConnectionAccessQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetSubjectConnectionAccessDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setSubjectConnectionAccess'); }, - updateConnectionConfiguration(variables: UpdateConnectionConfigurationQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(UpdateConnectionConfigurationDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'updateConnectionConfiguration'); + updateConnectionConfiguration(variables: UpdateConnectionConfigurationQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(UpdateConnectionConfigurationDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'updateConnectionConfiguration'); }, - closeConnection(variables: CloseConnectionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CloseConnectionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'closeConnection'); + closeConnection(variables: CloseConnectionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CloseConnectionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'closeConnection'); }, - createConnection(variables: CreateConnectionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createConnection'); + createConnection(variables: CreateConnectionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createConnection'); }, - createConnectionFromNode(variables: CreateConnectionFromNodeMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionFromNodeDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createConnectionFromNode'); + createConnectionFromNode(variables: CreateConnectionFromNodeMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionFromNodeDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createConnectionFromNode'); }, - createConnectionFromTemplate(variables: CreateConnectionFromTemplateMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionFromTemplateDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createConnectionFromTemplate'); + createConnectionFromTemplate(variables: CreateConnectionFromTemplateMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CreateConnectionFromTemplateDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'createConnectionFromTemplate'); }, - deleteConnection(variables: DeleteConnectionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DeleteConnectionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'deleteConnection'); + deleteConnection(variables: DeleteConnectionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DeleteConnectionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'deleteConnection'); }, - driverList(variables: DriverListQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(DriverListDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'driverList'); + driverList(variables: DriverListQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(DriverListDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'driverList'); }, - executionContextCreate(variables: ExecutionContextCreateMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextCreateDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'executionContextCreate'); + executionContextCreate(variables: ExecutionContextCreateMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextCreateDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'executionContextCreate'); }, - executionContextDestroy(variables: ExecutionContextDestroyMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextDestroyDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'executionContextDestroy'); + executionContextDestroy(variables: ExecutionContextDestroyMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextDestroyDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'executionContextDestroy'); }, - executionContextList(variables?: ExecutionContextListQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextListDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'executionContextList'); + executionContextList(variables?: ExecutionContextListQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextListDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'executionContextList'); }, - executionContextUpdate(variables: ExecutionContextUpdateMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextUpdateDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'executionContextUpdate'); + executionContextUpdate(variables: ExecutionContextUpdateMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ExecutionContextUpdateDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'executionContextUpdate'); }, - getAuthModels(variables?: GetAuthModelsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetAuthModelsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getAuthModels'); + getAuthModels(variables?: GetAuthModelsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetAuthModelsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getAuthModels'); }, - getTemplateConnections(variables: GetTemplateConnectionsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetTemplateConnectionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getTemplateConnections'); + getTemplateConnections(variables: GetTemplateConnectionsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetTemplateConnectionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getTemplateConnections'); }, - getUserConnections(variables: GetUserConnectionsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetUserConnectionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getUserConnections'); + getUserConnections(variables: GetUserConnectionsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetUserConnectionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getUserConnections'); }, - initConnection(variables: InitConnectionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(InitConnectionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'initConnection'); + initConnection(variables: InitConnectionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(InitConnectionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'initConnection'); }, - refreshSessionConnections(variables?: RefreshSessionConnectionsMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(RefreshSessionConnectionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'refreshSessionConnections'); + refreshSessionConnections(variables?: RefreshSessionConnectionsMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(RefreshSessionConnectionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'refreshSessionConnections'); }, - setConnectionNavigatorSettings(variables: SetConnectionNavigatorSettingsMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetConnectionNavigatorSettingsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setConnectionNavigatorSettings'); + setConnectionNavigatorSettings(variables: SetConnectionNavigatorSettingsMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetConnectionNavigatorSettingsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setConnectionNavigatorSettings'); }, - testConnection(variables: TestConnectionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(TestConnectionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'testConnection'); + testConnection(variables: TestConnectionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(TestConnectionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'testConnection'); }, - testNetworkHandler(variables: TestNetworkHandlerMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(TestNetworkHandlerDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'testNetworkHandler'); + testNetworkHandler(variables: TestNetworkHandlerMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(TestNetworkHandlerDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'testNetworkHandler'); }, - updateConnection(variables: UpdateConnectionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(UpdateConnectionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'updateConnection'); + updateConnection(variables: UpdateConnectionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(UpdateConnectionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'updateConnection'); }, - exportDataFromContainer(variables: ExportDataFromContainerQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ExportDataFromContainerDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'exportDataFromContainer'); + exportDataFromContainer(variables: ExportDataFromContainerQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ExportDataFromContainerDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'exportDataFromContainer'); }, - exportDataFromResults(variables: ExportDataFromResultsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ExportDataFromResultsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'exportDataFromResults'); + exportDataFromResults(variables: ExportDataFromResultsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ExportDataFromResultsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'exportDataFromResults'); }, - getDataTransferProcessors(variables?: GetDataTransferProcessorsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetDataTransferProcessorsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getDataTransferProcessors'); + getDataTransferProcessors(variables?: GetDataTransferProcessorsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetDataTransferProcessorsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getDataTransferProcessors'); }, - removeDataTransferFile(variables: RemoveDataTransferFileQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(RemoveDataTransferFileDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'removeDataTransferFile'); + removeDataTransferFile(variables: RemoveDataTransferFileQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(RemoveDataTransferFileDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'removeDataTransferFile'); }, - navGetStructContainers(variables: NavGetStructContainersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(NavGetStructContainersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'navGetStructContainers'); + navGetStructContainers(variables: NavGetStructContainersQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(NavGetStructContainersDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'navGetStructContainers'); }, - formatSqlQuery(variables: FormatSqlQueryQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(FormatSqlQueryDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'formatSqlQuery'); + formatSqlQuery(variables: FormatSqlQueryQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(FormatSqlQueryDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'formatSqlQuery'); }, - getAsyncTaskInfo(variables: GetAsyncTaskInfoMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetAsyncTaskInfoDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getAsyncTaskInfo'); + getAsyncTaskInfo(variables: GetAsyncTaskInfoMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetAsyncTaskInfoDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getAsyncTaskInfo'); }, - getNetworkHandlers(variables?: GetNetworkHandlersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetNetworkHandlersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getNetworkHandlers'); + getNetworkHandlers(variables?: GetNetworkHandlersQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetNetworkHandlersDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getNetworkHandlers'); }, - asyncReadDataFromContainer(variables: AsyncReadDataFromContainerMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AsyncReadDataFromContainerDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'asyncReadDataFromContainer'); + asyncReadDataFromContainer(variables: AsyncReadDataFromContainerMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AsyncReadDataFromContainerDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'asyncReadDataFromContainer'); }, - asyncSqlExecuteQuery(variables: AsyncSqlExecuteQueryMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AsyncSqlExecuteQueryDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'asyncSqlExecuteQuery'); + asyncSqlExecuteQuery(variables: AsyncSqlExecuteQueryMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AsyncSqlExecuteQueryDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'asyncSqlExecuteQuery'); }, - asyncSqlExplainExecutionPlan(variables: AsyncSqlExplainExecutionPlanMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(AsyncSqlExplainExecutionPlanDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'asyncSqlExplainExecutionPlan'); + asyncSqlExplainExecutionPlan(variables: AsyncSqlExplainExecutionPlanMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(AsyncSqlExplainExecutionPlanDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'asyncSqlExplainExecutionPlan'); }, - closeResult(variables: CloseResultMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(CloseResultDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'closeResult'); + closeResult(variables: CloseResultMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(CloseResultDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'closeResult'); }, - getSqlExecuteTaskResults(variables: GetSqlExecuteTaskResultsMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetSqlExecuteTaskResultsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getSqlExecuteTaskResults'); + getSqlExecuteTaskResults(variables: GetSqlExecuteTaskResultsMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetSqlExecuteTaskResultsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getSqlExecuteTaskResults'); }, - getSqlExecutionPlanResult(variables: GetSqlExecutionPlanResultMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetSqlExecutionPlanResultDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getSqlExecutionPlanResult'); + getSqlExecutionPlanResult(variables: GetSqlExecutionPlanResultMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetSqlExecutionPlanResultDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getSqlExecutionPlanResult'); }, - updateResultsDataBatch(variables: UpdateResultsDataBatchMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(UpdateResultsDataBatchDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'updateResultsDataBatch'); + updateResultsDataBatch(variables: UpdateResultsDataBatchMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(UpdateResultsDataBatchDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'updateResultsDataBatch'); }, - updateResultsDataBatchScript(variables: UpdateResultsDataBatchScriptMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(UpdateResultsDataBatchScriptDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'updateResultsDataBatchScript'); + updateResultsDataBatchScript(variables: UpdateResultsDataBatchScriptMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(UpdateResultsDataBatchScriptDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'updateResultsDataBatchScript'); }, - metadataGetNodeDDL(variables: MetadataGetNodeDdlQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(MetadataGetNodeDdlDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'metadataGetNodeDDL'); + metadataGetNodeDDL(variables: MetadataGetNodeDdlQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(MetadataGetNodeDdlDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'metadataGetNodeDDL'); }, - getChildrenDBObjectInfo(variables: GetChildrenDbObjectInfoQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetChildrenDbObjectInfoDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getChildrenDBObjectInfo'); + getChildrenDBObjectInfo(variables: GetChildrenDbObjectInfoQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetChildrenDbObjectInfoDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getChildrenDBObjectInfo'); }, - getDBObjectInfo(variables: GetDbObjectInfoQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(GetDbObjectInfoDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'getDBObjectInfo'); + getDBObjectInfo(variables: GetDbObjectInfoQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(GetDbObjectInfoDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'getDBObjectInfo'); }, - navDeleteNodes(variables: NavDeleteNodesMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(NavDeleteNodesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'navDeleteNodes'); + navDeleteNodes(variables: NavDeleteNodesMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(NavDeleteNodesDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'navDeleteNodes'); }, - navNodeChildren(variables: NavNodeChildrenQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(NavNodeChildrenDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'navNodeChildren'); + navNodeChildren(variables: NavNodeChildrenQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(NavNodeChildrenDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'navNodeChildren'); }, - navNodeInfo(variables: NavNodeInfoQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(NavNodeInfoDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'navNodeInfo'); + navNodeInfo(variables: NavNodeInfoQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(NavNodeInfoDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'navNodeInfo'); }, - navRefreshNode(variables: NavRefreshNodeQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(NavRefreshNodeDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'navRefreshNode'); + navRefreshNode(variables: NavRefreshNodeQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(NavRefreshNodeDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'navRefreshNode'); }, - navRenameNode(variables: NavRenameNodeMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(NavRenameNodeDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'navRenameNode'); + navRenameNode(variables: NavRenameNodeMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(NavRenameNodeDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'navRenameNode'); }, - querySqlCompletionProposals(variables: QuerySqlCompletionProposalsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(QuerySqlCompletionProposalsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'querySqlCompletionProposals'); + querySqlCompletionProposals(variables: QuerySqlCompletionProposalsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(QuerySqlCompletionProposalsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'querySqlCompletionProposals'); }, - querySqlDialectInfo(variables: QuerySqlDialectInfoQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(QuerySqlDialectInfoDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'querySqlDialectInfo'); + querySqlDialectInfo(variables: QuerySqlDialectInfoQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(QuerySqlDialectInfoDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'querySqlDialectInfo'); }, - configureServer(variables: ConfigureServerQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ConfigureServerDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'configureServer'); + configureServer(variables: ConfigureServerQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ConfigureServerDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'configureServer'); }, - listFeatureSets(variables?: ListFeatureSetsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ListFeatureSetsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'listFeatureSets'); + listFeatureSets(variables?: ListFeatureSetsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ListFeatureSetsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'listFeatureSets'); }, - setDefaultNavigatorSettings(variables: SetDefaultNavigatorSettingsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SetDefaultNavigatorSettingsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'setDefaultNavigatorSettings'); + setDefaultNavigatorSettings(variables: SetDefaultNavigatorSettingsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SetDefaultNavigatorSettingsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'setDefaultNavigatorSettings'); }, - changeSessionLanguage(variables: ChangeSessionLanguageMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ChangeSessionLanguageDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'changeSessionLanguage'); + changeSessionLanguage(variables: ChangeSessionLanguageMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ChangeSessionLanguageDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'changeSessionLanguage'); }, - openSession(variables?: OpenSessionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(OpenSessionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'openSession'); + openSession(variables?: OpenSessionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(OpenSessionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'openSession'); }, - readSessionLog(variables: ReadSessionLogQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ReadSessionLogDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'readSessionLog'); + readSessionLog(variables: ReadSessionLogQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ReadSessionLogDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'readSessionLog'); }, - serverConfig(variables?: ServerConfigQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(ServerConfigDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'serverConfig'); + serverConfig(variables?: ServerConfigQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(ServerConfigDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'serverConfig'); }, - sessionPermissions(variables?: SessionPermissionsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SessionPermissionsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'sessionPermissions'); + sessionPermissions(variables?: SessionPermissionsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SessionPermissionsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'sessionPermissions'); }, - sessionState(variables?: SessionStateQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SessionStateDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'sessionState'); + sessionState(variables?: SessionStateQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SessionStateDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'sessionState'); }, - touchSession(variables?: TouchSessionMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(TouchSessionDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'touchSession'); + touchSession(variables?: TouchSessionMutationVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(TouchSessionDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'touchSession'); }, - sqlEntityQueryGenerators(variables: SqlEntityQueryGeneratorsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SqlEntityQueryGeneratorsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'sqlEntityQueryGenerators'); + sqlEntityQueryGenerators(variables: SqlEntityQueryGeneratorsQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SqlEntityQueryGeneratorsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'sqlEntityQueryGenerators'); }, - sqlGenerateEntityQuery(variables: SqlGenerateEntityQueryQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper(wrappedRequestHeaders => client.request(SqlGenerateEntityQueryDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'sqlGenerateEntityQuery'); + sqlGenerateEntityQuery(variables: SqlGenerateEntityQueryQueryVariables, requestHeaders?: Dom.RequestInit['headers']): Promise { + return withWrapper(wrappedRequestHeaders => client.request(SqlGenerateEntityQueryDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), 'sqlGenerateEntityQuery'); }, }; }