@@ -25,6 +25,7 @@ const MAXIMUM_QUERIES_IN_HISTORY = 20;
2525
2626const CHANGE_USER_INPUT = 'query/CHANGE_USER_INPUT' ;
2727const SAVE_QUERY_TO_HISTORY = 'query/SAVE_QUERY_TO_HISTORY' ;
28+ const UPDATE_QUERY_IN_HISTORY = 'query/UPDATE_QUERY_IN_HISTORY' ;
2829const SET_QUERY_HISTORY_FILTER = 'query/SET_QUERY_HISTORY_FILTER' ;
2930const GO_TO_PREVIOUS_QUERY = 'query/GO_TO_PREVIOUS_QUERY' ;
3031const GO_TO_NEXT_QUERY = 'query/GO_TO_NEXT_QUERY' ;
@@ -65,9 +66,9 @@ const executeQuery: Reducer<ExecuteQueryState, ExecuteQueryAction> = (
6566 }
6667
6768 case SAVE_QUERY_TO_HISTORY : {
68- const queryText = action . data ;
69+ const { queryText, queryId } = action . data ;
6970
70- const newQueries = [ ...state . history . queries , { queryText} ] . slice (
71+ const newQueries = [ ...state . history . queries , { queryText, queryId } ] . slice (
7172 state . history . queries . length >= MAXIMUM_QUERIES_IN_HISTORY ? 1 : 0 ,
7273 ) ;
7374 settingsManager . setUserSettingsValue ( QUERIES_HISTORY_KEY , newQueries ) ;
@@ -82,6 +83,38 @@ const executeQuery: Reducer<ExecuteQueryState, ExecuteQueryAction> = (
8283 } ;
8384 }
8485
86+ case UPDATE_QUERY_IN_HISTORY : {
87+ const { queryId, stats} = action . data ;
88+
89+ if ( ! stats ) {
90+ return state ;
91+ }
92+
93+ const index = state . history . queries . findIndex ( ( item ) => item . queryId === queryId ) ;
94+
95+ if ( index === - 1 ) {
96+ return state ;
97+ }
98+
99+ const newQueries = [ ...state . history . queries ] ;
100+ const { durationUs, endTime} = stats ;
101+ newQueries . splice ( index , 1 , {
102+ ...state . history . queries [ index ] ,
103+ durationUs,
104+ endTime,
105+ } ) ;
106+
107+ settingsManager . setUserSettingsValue ( QUERIES_HISTORY_KEY , newQueries ) ;
108+
109+ return {
110+ ...state ,
111+ history : {
112+ ...state . history ,
113+ queries : newQueries ,
114+ } ,
115+ } ;
116+ }
117+
85118 case GO_TO_PREVIOUS_QUERY : {
86119 const currentIndex = state . history . currentIndex ;
87120 if ( currentIndex <= 0 ) {
@@ -150,6 +183,11 @@ interface SendQueryParams extends QueryRequestParams {
150183 enableTracingLevel ?: boolean ;
151184}
152185
186+ interface QueryStats {
187+ durationUs ?: string | number ;
188+ endTime ?: string | number ;
189+ }
190+
153191export const executeQueryApi = api . injectEndpoints ( {
154192 endpoints : ( build ) => ( {
155193 executeQuery : build . mutation < IQueryResult , SendQueryParams > ( {
@@ -162,7 +200,7 @@ export const executeQueryApi = api.injectEndpoints({
162200 enableTracingLevel,
163201 queryId,
164202 } ,
165- { signal} ,
203+ { signal, dispatch } ,
166204 ) => {
167205 let action : ExecuteActions = 'execute' ;
168206 let syntax : QuerySyntax = QUERY_SYNTAX . yql ;
@@ -175,6 +213,7 @@ export const executeQueryApi = api.injectEndpoints({
175213 }
176214
177215 try {
216+ const timeStart = Date . now ( ) ;
178217 const response = await window . api . sendQuery (
179218 {
180219 schema,
@@ -201,6 +240,19 @@ export const executeQueryApi = api.injectEndpoints({
201240 }
202241
203242 const data = parseQueryAPIExecuteResponse ( response ) ;
243+
244+ const queryStats : QueryStats = { } ;
245+ if ( data . stats ) {
246+ const { DurationUs, Executions : [ { FinishTimeMs} ] = [ { } ] } = data . stats ;
247+ queryStats . durationUs = DurationUs ;
248+ queryStats . endTime = FinishTimeMs ;
249+ } else {
250+ const now = Date . now ( ) ;
251+ queryStats . durationUs = ( now - timeStart ) * 1000 ;
252+ queryStats . endTime = now ;
253+ }
254+
255+ dispatch ( updateQueryInHistory ( queryStats , queryId ) ) ;
204256 return { data} ;
205257 } catch ( error ) {
206258 return { error} ;
@@ -211,13 +263,20 @@ export const executeQueryApi = api.injectEndpoints({
211263 overrideExisting : 'throw' ,
212264} ) ;
213265
214- export const saveQueryToHistory = ( queryText : string ) => {
266+ export const saveQueryToHistory = ( queryText : string , queryId : string ) => {
215267 return {
216268 type : SAVE_QUERY_TO_HISTORY ,
217- data : queryText ,
269+ data : { queryText, queryId } ,
218270 } as const ;
219271} ;
220272
273+ export function updateQueryInHistory ( stats : QueryStats , queryId : string ) {
274+ return {
275+ type : UPDATE_QUERY_IN_HISTORY ,
276+ data : { queryId, stats} ,
277+ } as const ;
278+ }
279+
221280export const goToPreviousQuery = ( ) => {
222281 return {
223282 type : GO_TO_PREVIOUS_QUERY ,
0 commit comments