From 05c247c060f2ab0369b2e47d233032a357134055 Mon Sep 17 00:00:00 2001 From: Anton Standrik Date: Tue, 9 Dec 2025 20:10:39 +0300 Subject: [PATCH 01/26] feat: specify resource pools when launching a query --- .../QuerySettingsDialog.tsx | 49 ++++++++++++++ .../Query/QuerySettingsDialog/constants.ts | 3 + .../Query/QuerySettingsDialog/i18n/en.json | 1 + .../Query/QuerySettingsDialog/i18n/ru.json | 1 + .../__test__/prepareQueryWithPragmas.test.ts | 30 ++++++++- src/store/reducers/query/query.ts | 64 +++++++++++++++++-- src/store/reducers/query/utils.ts | 20 ++++++ src/utils/query.ts | 2 + 8 files changed, 164 insertions(+), 6 deletions(-) diff --git a/src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.tsx b/src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.tsx index c8ab3737e1..362fbbf43a 100644 --- a/src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.tsx +++ b/src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.tsx @@ -5,6 +5,7 @@ import {zodResolver} from '@hookform/resolvers/zod'; import {Controller, useForm} from 'react-hook-form'; import {useTracingLevelOptionAvailable} from '../../../../store/reducers/capabilities/hooks'; +import {queryApi} from '../../../../store/reducers/query/query'; import { selectQueryAction, setQueryAction, @@ -20,6 +21,7 @@ import { useTypedSelector, } from '../../../../utils/hooks'; import {QUERY_MODES, querySettingsValidationSchema} from '../../../../utils/query'; +import {useCurrentSchema} from '../../TenantContext'; import {QuerySettingsSelect} from './QuerySettingsSelect'; import {QuerySettingsTimeout} from './QuerySettingsTimeout'; @@ -86,6 +88,14 @@ function QuerySettingsForm({initialValues, onSubmit, onClose}: QuerySettingsForm const [useShowPlanToSvg] = useSetting(SETTING_KEYS.USE_SHOW_PLAN_SVG); const enableTracingLevel = useTracingLevelOptionAvailable(); const [isQueryStreamingEnabled] = useQueryStreamingSetting(); + const {database} = useCurrentSchema(); + const {data: resourcePools = [], isLoading: isResourcePoolsLoading} = + queryApi.useGetResourcePoolsQuery( + {database}, + { + skip: !database, + }, + ); const timeout = watch('timeout'); const queryMode = watch('queryMode'); @@ -120,6 +130,45 @@ function QuerySettingsForm({initialValues, onSubmit, onClose}: QuerySettingsForm /> + + +
+ ( + field.onChange(value || undefined)} + settingOptions={[ + { + value: '' as never, + content: `${QUERY_SETTINGS_FIELD_SETTINGS.resourcePool.title}${i18n('description.default')}`, + text: '', + isDefault: true, + }, + ...(resourcePools.map( + (name) => + ({ + value: name, + content: name, + text: name, + }) as never, + ) as never[]), + ]} + /> + )} + /> +
+
{enableTracingLevel && ( )} + + +
+ ( + + id="resourcePool" + setting={field.value ?? RESOURCE_POOL_NO_OVERRIDE_VALUE} + disabled={isResourcePoolsLoading || !resourcePools.length} + onUpdateSetting={(value) => field.onChange(value)} + settingOptions={resourcePoolOptions} + /> + )} + /> +
+