Skip to content

Commit a58e63a

Browse files
astandrikCopilot
andauthored
fix: add setting for query parameter output_chunk_max_size (#3164)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent d1b9751 commit a58e63a

File tree

7 files changed

+58
-2
lines changed

7 files changed

+58
-2
lines changed

src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
margin-right: var(--g-spacing-2);
3434
}
3535

36+
&__output-chunk-max-size {
37+
width: 50%;
38+
margin-right: var(--g-spacing-2);
39+
}
40+
3641
&__pragmas {
3742
width: 100%;
3843
}

src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.tsx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type {QuerySettings} from '../../../../types/store/query';
1414
import {cn} from '../../../../utils/cn';
1515
import {
1616
useQueryExecutionSettings,
17+
useQueryStreamingSetting,
1718
useSetting,
1819
useTypedDispatch,
1920
useTypedSelector,
@@ -84,6 +85,7 @@ function QuerySettingsForm({initialValues, onSubmit, onClose}: QuerySettingsForm
8485

8586
const [useShowPlanToSvg] = useSetting<boolean>(SETTING_KEYS.USE_SHOW_PLAN_SVG);
8687
const enableTracingLevel = useTracingLevelOptionAvailable();
88+
const [isQueryStreamingEnabled] = useQueryStreamingSetting();
8789

8890
const timeout = watch('timeout');
8991
const queryMode = watch('queryMode');
@@ -220,6 +222,39 @@ function QuerySettingsForm({initialValues, onSubmit, onClose}: QuerySettingsForm
220222
/>
221223
</div>
222224
</Flex>
225+
{isQueryStreamingEnabled && (
226+
<Flex direction="row" alignItems="flex-start" className={b('dialog-row')}>
227+
<label htmlFor="outputChunkMaxSize" className={b('field-title')}>
228+
{QUERY_SETTINGS_FIELD_SETTINGS.outputChunkMaxSize.title}
229+
</label>
230+
<div className={b('control-wrapper')}>
231+
<Controller
232+
name="outputChunkMaxSize"
233+
control={control}
234+
render={({field}) => (
235+
<TextInput
236+
id="outputChunkMaxSize"
237+
type="number"
238+
{...field}
239+
value={field.value?.toString()}
240+
className={b('output-chunk-max-size')}
241+
placeholder="1000000"
242+
validationState={
243+
errors.outputChunkMaxSize ? 'invalid' : undefined
244+
}
245+
errorMessage={errors.outputChunkMaxSize?.message}
246+
errorPlacement="inside"
247+
endContent={
248+
<span className={b('postfix')}>
249+
{i18n('form.output.chunk.max.size.bytes')}
250+
</span>
251+
}
252+
/>
253+
)}
254+
/>
255+
</div>
256+
</Flex>
257+
)}
223258
<Flex direction="row" alignItems="flex-start" className={b('dialog-row')}>
224259
<label htmlFor="pragmas" className={b('field-title')}>
225260
{QUERY_SETTINGS_FIELD_SETTINGS.pragmas.title}

src/containers/Tenant/Query/QuerySettingsDialog/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ export const QUERY_SETTINGS_FIELD_SETTINGS = {
151151
limitRows: {
152152
title: formI18n('form.limit-rows'),
153153
},
154+
outputChunkMaxSize: {
155+
title: formI18n('form.output.chunk.max.size'),
156+
},
154157
pragmas: {
155158
title: formI18n('form.pragmas'),
156159
},

src/containers/Tenant/Query/QuerySettingsDialog/i18n/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
"form.statistics-mode": "Statistics collection mode",
77
"form.tracing-level": "Tracing level",
88
"form.limit-rows": "Limit rows",
9+
"form.output.chunk.max.size": "Output chunk max size",
10+
"form.output.chunk.max.size.bytes": "bytes",
911
"form.pragmas": "Pragmas",
1012
"button-done": "Save",
1113
"tooltip_plan-to-svg-statistics": "Statistics option is set to \"Full\" due to the enabled \"Execution plan\" experiment.\n To disable it, go to the \"Experiments\" section in the user settings.",

src/containers/Tenant/Query/QuerySettingsDialog/i18n/ru.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
"form.statistics-mode": "Режим сбора статистики",
77
"form.tracing-level": "Tracing level",
88
"form.limit-rows": "Лимит строк",
9+
"form.output.chunk.max.size": "Максимальный размер чанка",
10+
"form.output.chunk.max.size.bytes": "байт",
911
"form.pragmas": "Прагмы",
1012
"tooltip_plan-to-svg-statistics": "Опция статистики установлена в значение \"Full\" из-за включенного эксперимента \"Execution plan\".\n Чтобы отключить его, перейдите в раздел \"Experiments\" в настройках пользователя.",
1113
"button-done": "Готово",

src/store/reducers/query/query.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ interface SendQueryParams extends QueryRequestParams {
132132
// Stream query receives queryId from session chunk.
133133
type StreamQueryParams = Omit<SendQueryParams, 'queryId'>;
134134

135-
const DEFAULT_STREAM_CHUNK_SIZE = 1000;
136135
const DEFAULT_CONCURRENT_RESULTS = false;
137136

138137
export const queryApi = api.injectEndpoints({
@@ -192,7 +191,9 @@ export const queryApi = api.injectEndpoints({
192191
timeout: isNumeric(querySettings.timeout)
193192
? Number(querySettings.timeout) * 1000
194193
: undefined,
195-
output_chunk_max_size: DEFAULT_STREAM_CHUNK_SIZE,
194+
output_chunk_max_size: isNumeric(querySettings.outputChunkMaxSize)
195+
? Number(querySettings.outputChunkMaxSize)
196+
: undefined,
196197
concurrent_results: DEFAULT_CONCURRENT_RESULTS || undefined,
197198
base64,
198199
},

src/utils/query.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,10 @@ export const querySettingsValidationSchema = z.object({
330330
(val) => (val === '' ? undefined : val),
331331
z.coerce.number().gt(0).lte(100_000).or(z.undefined()),
332332
),
333+
outputChunkMaxSize: z.preprocess(
334+
(val) => (val === '' ? undefined : val),
335+
z.coerce.number().int().positive().or(z.undefined()),
336+
),
333337
queryMode: queryModeSchema,
334338
transactionMode: transactionModeSchema,
335339
statisticsMode: statisticsModeSchema,
@@ -347,6 +351,10 @@ export const querySettingsRestoreSchema = z
347351
(val) => (val === '' ? undefined : val),
348352
z.coerce.number().gt(0).lte(100_000).optional().catch(DEFAULT_QUERY_SETTINGS.limitRows),
349353
),
354+
outputChunkMaxSize: z.preprocess(
355+
(val) => (val === '' ? undefined : val),
356+
z.coerce.number().int().positive().optional(),
357+
),
350358
queryMode: queryModeSchema.catch(DEFAULT_QUERY_SETTINGS.queryMode),
351359
transactionMode: transactionModeSchema.catch(DEFAULT_QUERY_SETTINGS.transactionMode),
352360
statisticsMode: statisticsModeSchema.catch(DEFAULT_QUERY_SETTINGS.statisticsMode),

0 commit comments

Comments
 (0)