Skip to content

Commit e345425

Browse files
committed
Fix wrong number of pages shown on initial display.
1 parent 0b32961 commit e345425

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

extensions/ql-vscode/src/adapt.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ export interface ExtensionParsedResultSets {
129129
t: 'ExtensionParsed';
130130
pageNumber: number;
131131
numPages: number;
132+
numInterpretedPages: number;
132133
selectedTable?: string; // when undefined, means 'show default table'
133134
resultSetNames: string[];
134135
resultSet: ResultSet;

extensions/ql-vscode/src/interface.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ function numPagesOfResultSet(resultSet: RawResultSet): number {
9797
return Math.ceil(resultSet.schema.tupleCount / RAW_RESULTS_PAGE_SIZE);
9898
}
9999

100+
function numInterpretedPages(interpretation: Interpretation | undefined): number {
101+
return Math.ceil((interpretation?.sarif.runs[0].results?.length || 0) / INTERPRETED_RESULTS_PAGE_SIZE);
102+
}
103+
100104
export class InterfaceManager extends DisposableObject {
101105
private _displayedQuery?: CompletedQuery;
102106
private _interpretation?: Interpretation;
@@ -352,11 +356,11 @@ export class InterfaceManager extends DisposableObject {
352356
);
353357
const adaptedSchema = adaptSchema(schema);
354358
const resultSet = adaptBqrs(adaptedSchema, chunk);
355-
356359
return {
357360
t: 'ExtensionParsed',
358361
pageNumber: 0,
359362
numPages: numPagesOfResultSet(resultSet),
363+
numInterpretedPages: numInterpretedPages(this._interpretation),
360364
resultSet: { t: 'RawResultSet', ...resultSet },
361365
selectedTable: undefined,
362366
resultSetNames,
@@ -407,7 +411,7 @@ export class InterfaceManager extends DisposableObject {
407411
metadata: this._displayedQuery.query.metadata,
408412
pageNumber,
409413
resultSetNames,
410-
numPages: Math.ceil(this._interpretation.sarif.runs[0].results.length / INTERPRETED_RESULTS_PAGE_SIZE),
414+
numPages: numInterpretedPages(this._interpretation),
411415
});
412416
}
413417

@@ -460,6 +464,7 @@ export class InterfaceManager extends DisposableObject {
460464
pageNumber,
461465
resultSet: { t: 'RawResultSet', ...resultSet },
462466
numPages: numPagesOfResultSet(resultSet),
467+
numInterpretedPages: numInterpretedPages(this._interpretation),
463468
selectedTable: selectedTable,
464469
resultSetNames,
465470
};

extensions/ql-vscode/src/view/result-tables.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,22 @@ export class ResultTables
174174

175175
renderPageButtons(resultSets: ExtensionParsedResultSets): JSX.Element {
176176
const selectedTable = this.state.selectedTable;
177+
178+
// FIXME: The extension, not the view, should be in charge of deciding whether to initially show
179+
// a raw or alerts page. We have to conditionally recompute the number of pages here, because
180+
// on initial load of query results, resultSets.numPages will have the number of *raw* pages available,
181+
// not interpreted pages, because the extension doesn't know the view will default to showing alerts
182+
// instead.
183+
const numPages = selectedTable == ALERTS_TABLE_NAME ?
184+
resultSets.numInterpretedPages : resultSets.numPages;
185+
177186
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
178187
this.setState({ selectedPage: e.target.value });
179188
};
180189
const choosePage = (input: string) => {
181190
const pageNumber = parseInt(input);
182191
if (pageNumber !== undefined && !isNaN(pageNumber)) {
183-
const actualPageNumber = Math.max(0, Math.min(pageNumber - 1, resultSets.numPages - 1));
192+
const actualPageNumber = Math.max(0, Math.min(pageNumber - 1, numPages - 1));
184193
vscode.postMessage({
185194
t: 'changePage',
186195
pageNumber: actualPageNumber,
@@ -199,17 +208,18 @@ export class ResultTables
199208
const nextPage = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
200209
vscode.postMessage({
201210
t: 'changePage',
202-
pageNumber: Math.min(resultSets.pageNumber + 1, resultSets.numPages - 1),
211+
pageNumber: Math.min(resultSets.pageNumber + 1, numPages - 1),
203212
selectedTable,
204213
});
205214
};
215+
206216
return <span>
207217
<button onClick={prevPage} >&lt;</button>
208218
<input size={3} value={this.state.selectedPage} onChange={onChange}
209219
onBlur={e => choosePage(e.target.value)}
210220
onKeyDown={e => { if (e.keyCode === 13) choosePage((e.target as HTMLInputElement).value); }}
211221
/>
212-
/ {resultSets.numPages}
222+
/ {numPages}
213223
<button value=">" onClick={nextPage} >&gt;</button>
214224
</span>;
215225
}

extensions/ql-vscode/src/view/results.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class App extends React.Component<{}, ResultsViewState> {
202202
parsedResultSets: {
203203
t: 'ExtensionParsed',
204204
numPages: msg.numPages,
205+
numInterpretedPages: msg.numPages,
205206
resultSetNames: msg.resultSetNames,
206207
pageNumber: msg.pageNumber,
207208
resultSet: {

0 commit comments

Comments
 (0)