@@ -29,6 +29,7 @@ import {
29
29
RAW_RESULTS_PAGE_SIZE ,
30
30
INTERPRETED_RESULTS_PAGE_SIZE ,
31
31
ALERTS_TABLE_NAME ,
32
+ RawResultsSortState ,
32
33
} from './interface-types' ;
33
34
import { Logger } from './logging' ;
34
35
import * as messages from './messages' ;
@@ -190,8 +191,8 @@ export class InterfaceManager extends DisposableObject {
190
191
return this . _panel ;
191
192
}
192
193
193
- private async changeSortState (
194
- update : ( query : CompletedQuery ) => Promise < void >
194
+ private async changeInterpretedSortState (
195
+ sortState : InterpretedResultsSortState | undefined
195
196
) : Promise < void > {
196
197
if ( this . _displayedQuery === undefined ) {
197
198
showAndLogErrorMessage (
@@ -201,10 +202,34 @@ export class InterfaceManager extends DisposableObject {
201
202
}
202
203
// Notify the webview that it should expect new results.
203
204
await this . postMessage ( { t : 'resultsUpdating' } ) ;
204
- await update ( this . _displayedQuery ) ;
205
+ this . _displayedQuery . updateInterpretedSortState ( sortState ) ;
205
206
await this . showResults ( this . _displayedQuery , WebviewReveal . NotForced , true ) ;
206
207
}
207
208
209
+ private async changeRawSortState (
210
+ resultSetName : string ,
211
+ sortState : RawResultsSortState | undefined
212
+ ) : Promise < void > {
213
+ if ( this . _displayedQuery === undefined ) {
214
+ showAndLogErrorMessage (
215
+ 'Failed to sort results since evaluation info was unknown.'
216
+ ) ;
217
+ return ;
218
+ }
219
+ // Notify the webview that it should expect new results.
220
+ await this . postMessage ( { t : 'resultsUpdating' } ) ;
221
+ await this . _displayedQuery . updateSortState (
222
+ this . cliServer ,
223
+ resultSetName ,
224
+ sortState
225
+ ) ;
226
+ // Sorting resets to first page, as there is arguably no particular
227
+ // correlation between the results on the nth page that the user
228
+ // was previously viewing and the contents of the nth page in a
229
+ // new sorted order.
230
+ await this . showPageOfRawResults ( resultSetName , 0 , true ) ;
231
+ }
232
+
208
233
private async handleMsgFromView ( msg : FromResultsViewMsg ) : Promise < void > {
209
234
switch ( msg . t ) {
210
235
case 'viewSourceFile' : {
@@ -235,18 +260,10 @@ export class InterfaceManager extends DisposableObject {
235
260
this . _panelLoadedCallBacks = [ ] ;
236
261
break ;
237
262
case 'changeSort' :
238
- await this . changeSortState ( query =>
239
- query . updateSortState (
240
- this . cliServer ,
241
- msg . resultSetName ,
242
- msg . sortState
243
- )
244
- ) ;
263
+ await this . changeRawSortState ( msg . resultSetName , msg . sortState ) ;
245
264
break ;
246
265
case 'changeInterpretedSort' :
247
- await this . changeSortState ( query =>
248
- query . updateInterpretedSortState ( this . cliServer , msg . sortState )
249
- ) ;
266
+ await this . changeInterpretedSortState ( msg . sortState ) ;
250
267
break ;
251
268
case 'changePage' :
252
269
if ( msg . selectedTable === ALERTS_TABLE_NAME ) {
@@ -423,7 +440,8 @@ export class InterfaceManager extends DisposableObject {
423
440
*/
424
441
public async showPageOfRawResults (
425
442
selectedTable : string ,
426
- pageNumber : number
443
+ pageNumber : number ,
444
+ sorted = false
427
445
) : Promise < void > {
428
446
const results = this . _displayedQuery ;
429
447
if ( results === undefined ) {
@@ -445,8 +463,21 @@ export class InterfaceManager extends DisposableObject {
445
463
if ( schema === undefined )
446
464
throw new Error ( `Query result set '${ selectedTable } ' not found.` ) ;
447
465
466
+ const getResultsPath = ( ) => {
467
+ if ( sorted ) {
468
+ const resultsPath = results . sortedResultsInfo . get ( selectedTable ) ?. resultsPath ;
469
+ if ( resultsPath === undefined ) {
470
+ throw new Error ( `Can't find sorted results for table ${ selectedTable } ` ) ;
471
+ }
472
+ return resultsPath ;
473
+ }
474
+ else {
475
+ return results . query . resultsPaths . resultsPath ;
476
+ }
477
+ } ;
478
+
448
479
const chunk = await this . cliServer . bqrsDecode (
449
- results . query . resultsPaths . resultsPath ,
480
+ getResultsPath ( ) ,
450
481
schema . name ,
451
482
{
452
483
offset : schema . pagination ?. offsets [ pageNumber ] ,
0 commit comments