From 17510f2de185d86c0f4e86d5aace584fa0bc54f9 Mon Sep 17 00:00:00 2001 From: Tatiana Fokina <123386439+tfokina@users.noreply.github.com> Date: Mon, 10 Jul 2023 17:55:24 +0600 Subject: [PATCH] CB-3608 memoize parse script (#1805) Co-authored-by: dariamarutkina <125263541+dariamarutkina@users.noreply.github.com> --- .../plugin-sql-editor/src/SqlEditor/useSqlEditor.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts index 32495dc61b..177807b6b7 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts @@ -13,7 +13,7 @@ import { ConnectionExecutionContextService, createConnectionParam } from '@cloud import { useService } from '@cloudbeaver/core-di'; import { CommonDialogService, ConfirmationDialog, DialogueStateResult } from '@cloudbeaver/core-dialogs'; import { SyncExecutor } from '@cloudbeaver/core-executor'; -import type { SqlCompletionProposal, SqlDialectInfo } from '@cloudbeaver/core-sdk'; +import type { SqlCompletionProposal, SqlDialectInfo, SqlScriptInfoFragment } from '@cloudbeaver/core-sdk'; import { createLastPromiseGetter, isObjectsEqual, LastPromiseGetter, throttleAsync } from '@cloudbeaver/core-utils'; import type { ISqlEditorTabState } from '../ISqlEditorTabState'; @@ -39,6 +39,7 @@ interface ISQLEditorDataPrivate extends ISQLEditorData { readonly sqlResultTabsService: SqlResultTabsService; readonly dataSource: ISqlDataSource | undefined; readonly getLastAutocomplete: LastPromiseGetter; + readonly parseScript: LastPromiseGetter; cursor: ICursor; readonlyState: boolean; @@ -175,6 +176,7 @@ export function useSqlEditor(state: ISqlEditorTabState): ISQLEditorData { }, getLastAutocomplete: createLastPromiseGetter(), + parseScript: createLastPromiseGetter(), getHintProposals: throttleAsync(async function getHintProposals(this: ISQLEditorDataPrivate, position, simple) { if (!this.dataSource?.executionContext) { @@ -353,7 +355,7 @@ export function useSqlEditor(state: ISqlEditorTabState): ISQLEditorData { return; } - const { queries } = await this.sqlEditorService.parseSQLScript(connectionId, script); + const { queries } = await this.parseScript([connectionId, script], () => this.sqlEditorService.parseSQLScript(connectionId, script)); if (this.parser.actualScript === script) { this.parser.setQueries(queries);