11import { createSelector , createSlice } from '@reduxjs/toolkit' ;
22import type { PayloadAction } from '@reduxjs/toolkit' ;
33
4- import { settingsManager } from '../../../services/settings' ;
54import { TracingLevelNumber } from '../../../types/api/query' ;
65import type { QueryAction , QueryRequestParams , QuerySettings } from '../../../types/store/query' ;
76import type { StreamDataChunk } from '../../../types/store/streaming' ;
@@ -11,25 +10,15 @@ import {isQueryErrorResponse} from '../../../utils/query';
1110import { isNumeric } from '../../../utils/utils' ;
1211import type { RootState } from '../../defaultStore' ;
1312import { api } from '../api' ;
14- import { SETTING_KEYS } from '../settings/constants' ;
1513
1614import { prepareQueryData } from './prepareQueryData' ;
1715import {
1816 addStreamingChunks as addStreamingChunksReducer ,
1917 setStreamQueryResponse as setStreamQueryResponseReducer ,
2018 setStreamSession as setStreamSessionReducer ,
2119} from './streamingReducers' ;
22- import type { QueryResult , QueryState } from './types' ;
23- import { getActionAndSyntaxFromQueryMode , getQueryInHistory , prepareQueryWithPragmas } from './utils' ;
24-
25- const MAXIMUM_QUERIES_IN_HISTORY = 20 ;
26-
27- const queriesHistoryInitial = settingsManager . readUserSettingsValue (
28- SETTING_KEYS . QUERIES_HISTORY ,
29- [ ] ,
30- ) as string [ ] ;
31-
32- const sliceLimit = queriesHistoryInitial . length - MAXIMUM_QUERIES_IN_HISTORY ;
20+ import type { QueryResult , QueryState , QueryStats } from './types' ;
21+ import { getActionAndSyntaxFromQueryMode , prepareQueryWithPragmas } from './utils' ;
3322
3423const rawQuery = loadFromSessionStorage ( QUERY_EDITOR_CURRENT_QUERY_KEY ) ;
3524const input = typeof rawQuery === 'string' ? rawQuery : '' ;
@@ -39,16 +28,7 @@ const isDirty = Boolean(loadFromSessionStorage(QUERY_EDITOR_DIRTY_KEY));
3928const initialState : QueryState = {
4029 input,
4130 isDirty,
42- history : {
43- queries : queriesHistoryInitial
44- . slice ( sliceLimit < 0 ? 0 : sliceLimit )
45- . map ( getQueryInHistory ) ,
46- currentIndex :
47- queriesHistoryInitial . length > MAXIMUM_QUERIES_IN_HISTORY
48- ? MAXIMUM_QUERIES_IN_HISTORY - 1
49- : queriesHistoryInitial . length - 1 ,
50- filter : '' ,
51- } ,
31+ historyFilter : '' ,
5232} ;
5333
5434const slice = createSlice ( {
@@ -66,76 +46,11 @@ const slice = createSlice({
6646 setQueryResult : ( state , action : PayloadAction < QueryResult | undefined > ) => {
6747 state . result = action . payload ;
6848 } ,
69- saveQueryToHistory : (
70- state ,
71- action : PayloadAction < { queryText : string ; queryId : string } > ,
72- ) => {
73- const { queryText, queryId} = action . payload ;
74-
75- const newQueries = [ ...state . history . queries , { queryText, queryId} ] . slice (
76- state . history . queries . length >= MAXIMUM_QUERIES_IN_HISTORY ? 1 : 0 ,
77- ) ;
78- settingsManager . setUserSettingsValue ( SETTING_KEYS . QUERIES_HISTORY , newQueries ) ;
79- const currentIndex = newQueries . length - 1 ;
80-
81- state . history = {
82- queries : newQueries ,
83- currentIndex,
84- } ;
85- } ,
86- updateQueryInHistory : (
87- state ,
88- action : PayloadAction < { queryId : string ; stats : QueryStats } > ,
89- ) => {
90- const { queryId, stats} = action . payload ;
91-
92- if ( ! stats ) {
93- return ;
94- }
95-
96- const index = state . history . queries . findIndex ( ( item ) => item . queryId === queryId ) ;
97-
98- if ( index === - 1 ) {
99- return ;
100- }
101-
102- const newQueries = [ ...state . history . queries ] ;
103- const { durationUs, endTime} = stats ;
104- newQueries . splice ( index , 1 , {
105- ...state . history . queries [ index ] ,
106- durationUs,
107- endTime,
108- } ) ;
109-
110- settingsManager . setUserSettingsValue ( SETTING_KEYS . QUERIES_HISTORY , newQueries ) ;
111-
112- state . history . queries = newQueries ;
113- } ,
114- goToPreviousQuery : ( state ) => {
115- const currentIndex = state . history . currentIndex ;
116- if ( currentIndex <= 0 ) {
117- return ;
118- }
119- const newCurrentIndex = currentIndex - 1 ;
120- const query = state . history . queries [ newCurrentIndex ] ;
121- state . input = query . queryText ;
122- state . history . currentIndex = newCurrentIndex ;
123- } ,
124- goToNextQuery : ( state ) => {
125- const currentIndex = state . history . currentIndex ;
126- if ( currentIndex >= state . history . queries . length - 1 ) {
127- return ;
128- }
129- const newCurrentIndex = currentIndex + 1 ;
130- const query = state . history . queries [ newCurrentIndex ] ;
131- state . input = query . queryText ;
132- state . history . currentIndex = newCurrentIndex ;
133- } ,
13449 setTenantPath : ( state , action : PayloadAction < string > ) => {
13550 state . tenantPath = action . payload ;
13651 } ,
13752 setQueryHistoryFilter : ( state , action : PayloadAction < string > ) => {
138- state . history . filter = action . payload ;
53+ state . historyFilter = action . payload ;
13954 } ,
14055 setResultTab : (
14156 state ,
@@ -152,14 +67,13 @@ const slice = createSlice({
15267 setStreamQueryResponse : setStreamQueryResponseReducer ,
15368 } ,
15469 selectors : {
155- selectQueriesHistoryFilter : ( state ) => state . history . filter || '' ,
70+ selectQueriesHistoryFilter : ( state ) => state . historyFilter || '' ,
15671 selectTenantPath : ( state ) => state . tenantPath ,
15772 selectResult : ( state ) => state . result ,
15873 selectStartTime : ( state ) => state . result ?. startTime ,
15974 selectEndTime : ( state ) => state . result ?. endTime ,
16075 selectUserInput : ( state ) => state . input ,
16176 selectIsDirty : ( state ) => state . isDirty ,
162- selectQueriesHistoryCurrentIndex : ( state ) => state . history ?. currentIndex ,
16377 selectResultTab : ( state ) => state . selectedResultTab ,
16478 } ,
16579} ) ;
@@ -175,27 +89,10 @@ export const selectQueryDuration = createSelector(
17589 } ,
17690) ;
17791
178- export const selectQueriesHistory = createSelector (
179- [
180- ( state : RootState ) => state . query . history . queries ,
181- ( state : RootState ) => state . query . history . filter ,
182- ] ,
183- ( queries , filter ) => {
184- const normalizedFilter = filter ?. toLowerCase ( ) ;
185- return normalizedFilter
186- ? queries . filter ( ( item ) => item . queryText . toLowerCase ( ) . includes ( normalizedFilter ) )
187- : queries ;
188- } ,
189- ) ;
190-
19192export default slice . reducer ;
19293export const {
19394 changeUserInput,
19495 setQueryResult,
195- saveQueryToHistory,
196- updateQueryInHistory,
197- goToPreviousQuery,
198- goToNextQuery,
19996 setTenantPath,
20097 setQueryHistoryFilter,
20198 addStreamingChunks,
@@ -207,7 +104,6 @@ export const {
207104
208105export const {
209106 selectQueriesHistoryFilter,
210- selectQueriesHistoryCurrentIndex,
211107 selectTenantPath,
212108 selectResult,
213109 selectUserInput,
@@ -228,11 +124,6 @@ interface SendQueryParams extends QueryRequestParams {
228124// Stream query receives queryId from session chunk.
229125type StreamQueryParams = Omit < SendQueryParams , 'queryId' > ;
230126
231- interface QueryStats {
232- durationUs ?: string | number ;
233- endTime ?: string | number ;
234- }
235-
236127const DEFAULT_STREAM_CHUNK_SIZE = 1000 ;
237128const DEFAULT_CONCURRENT_RESULTS = false ;
238129
@@ -421,8 +312,9 @@ export const queryApi = api.injectEndpoints({
421312 const data = prepareQueryData ( response ) ;
422313 data . traceId = response ?. _meta ?. traceId ;
423314
315+ const queryStats : QueryStats = { } ;
316+
424317 if ( actionType === 'execute' ) {
425- const queryStats : QueryStats = { } ;
426318 if ( data . stats ) {
427319 const { DurationUs, Executions : [ { FinishTimeMs} ] = [ { } ] } = data . stats ;
428320 queryStats . durationUs = DurationUs ;
@@ -432,8 +324,6 @@ export const queryApi = api.injectEndpoints({
432324 queryStats . durationUs = ( now - timeStart ) * 1000 ;
433325 queryStats . endTime = now ;
434326 }
435-
436- dispatch ( updateQueryInHistory ( { stats : queryStats , queryId} ) ) ;
437327 }
438328
439329 dispatch (
@@ -446,7 +336,7 @@ export const queryApi = api.injectEndpoints({
446336 endTime : Date . now ( ) ,
447337 } ) ,
448338 ) ;
449- return { data : null } ;
339+ return { data : { queryStats , queryId } } ;
450340 } catch ( error ) {
451341 const state = getState ( ) as RootState ;
452342 if ( state . query . result ?. startTime !== startTime ) {
0 commit comments