Skip to content

Commit 196a651

Browse files
committed
Add a setting to control page size
Also, set a max and min value on the input control of the page. This prevents going to a negative page, or a page after the last one.
1 parent f48176b commit 196a651

File tree

7 files changed

+26
-23
lines changed

7 files changed

+26
-23
lines changed

extensions/ql-vscode/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- Add more structured output for tests. [#626](https://github.com/github/vscode-codeql/pull/626)
1010
- Whenever the extension restarts, orphaned databases will be cleaned up. These are databases whose files are located inside of the extension's storage area, but are not imported into the workspace.
1111
- After renaming a database, the database list is re-sorted. [#685](https://github.com/github/vscode-codeql/pull/685)
12+
- Add a setting to configure number of results displayed in a single results view page. [#686](https://github.com/github/vscode-codeql/pull/686)
1213

1314
## 1.3.6 - 4 November 2020
1415

extensions/ql-vscode/package.json

+5
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@
157157
"default": 20,
158158
"description": "Max number of simultaneous queries to run using the 'CodeQL: Run Queries' command."
159159
},
160+
"codeQL.runningQueries.pageSize": {
161+
"type": "integer",
162+
"default": 200,
163+
"description": "Number of queries displayed per page of the results view."
164+
},
160165
"codeQL.queryHistory.format": {
161166
"type": "string",
162167
"default": "[%t] %q on %d - %s",

extensions/ql-vscode/src/config.ts

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ const RUNNING_TESTS_SETTING = new Setting('runningTests', ROOT_SETTING);
7272
export const NUMBER_OF_TEST_THREADS_SETTING = new Setting('numberOfThreads', RUNNING_TESTS_SETTING);
7373
export const MAX_QUERIES = new Setting('maxQueries', RUNNING_QUERIES_SETTING);
7474
export const AUTOSAVE_SETTING = new Setting('autoSave', RUNNING_QUERIES_SETTING);
75+
export const PAGE_SIZE = new Setting('pageSize', RUNNING_QUERIES_SETTING);
7576

7677
/** When these settings change, the running query server should be restarted. */
7778
const QUERY_SERVER_RESTARTING_SETTINGS = [NUMBER_OF_THREADS_SETTING, MEMORY_SETTING, DEBUG_SETTING];

extensions/ql-vscode/src/interface.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import {
2626
SortedResultsMap,
2727
InterpretedResultsSortState,
2828
SortDirection,
29-
RAW_RESULTS_PAGE_SIZE,
30-
INTERPRETED_RESULTS_PAGE_SIZE,
3129
ALERTS_TABLE_NAME,
3230
RawResultsSortState,
3331
} from './pure/interface-types';
@@ -48,6 +46,7 @@ import {
4846
} from './interface-utils';
4947
import { getDefaultResultSetName, ParsedResultSets } from './pure/interface-types';
5048
import { RawResultSet, transformBqrsResultSet, ResultSetSchema } from './pure/bqrs-cli-types';
49+
import { PAGE_SIZE } from './config';
5150

5251
/**
5352
* interface.ts
@@ -89,11 +88,11 @@ function sortInterpretedResults(
8988
}
9089

9190
function numPagesOfResultSet(resultSet: RawResultSet): number {
92-
return Math.ceil(resultSet.schema.rows / RAW_RESULTS_PAGE_SIZE);
91+
return Math.ceil(resultSet.schema.rows / PAGE_SIZE.getValue<number>());
9392
}
9493

9594
function numInterpretedPages(interpretation: Interpretation | undefined): number {
96-
return Math.ceil((interpretation?.sarif.runs[0].results?.length || 0) / INTERPRETED_RESULTS_PAGE_SIZE);
95+
return Math.ceil((interpretation?.sarif.runs[0].results?.length || 0) / PAGE_SIZE.getValue<number>());
9796
}
9897

9998
export class InterfaceManager extends DisposableObject {
@@ -388,12 +387,13 @@ export class InterfaceManager extends DisposableObject {
388387
// if there are interpreted results, but speculatively
389388
// send anyway.
390389
offset: schema.pagination?.offsets[0],
391-
pageSize: RAW_RESULTS_PAGE_SIZE
390+
pageSize: PAGE_SIZE.getValue<number>()
392391
}
393392
);
394393
const resultSet = transformBqrsResultSet(schema, chunk);
395394
const parsedResultSets: ParsedResultSets = {
396395
pageNumber: 0,
396+
pageSize: PAGE_SIZE.getValue<number>(),
397397
numPages: numPagesOfResultSet(resultSet),
398398
numInterpretedPages: numInterpretedPages(this._interpretation),
399399
resultSet: { ...resultSet, t: 'RawResultSet' },
@@ -442,6 +442,7 @@ export class InterfaceManager extends DisposableObject {
442442
metadata: this._displayedQuery.query.metadata,
443443
pageNumber,
444444
resultSetNames,
445+
pageSize: PAGE_SIZE.getValue(),
445446
numPages: numInterpretedPages(this._interpretation),
446447
});
447448
}
@@ -450,7 +451,7 @@ export class InterfaceManager extends DisposableObject {
450451
const resultsPath = results.getResultsPath(selectedTable);
451452
const schemas = await this.cliServer.bqrsInfo(
452453
resultsPath,
453-
RAW_RESULTS_PAGE_SIZE
454+
PAGE_SIZE.getValue()
454455
);
455456
return schemas['result-sets'];
456457
}
@@ -488,13 +489,14 @@ export class InterfaceManager extends DisposableObject {
488489
schema.name,
489490
{
490491
offset: schema.pagination?.offsets[pageNumber],
491-
pageSize: RAW_RESULTS_PAGE_SIZE
492+
pageSize: PAGE_SIZE.getValue()
492493
}
493494
);
494495
const resultSet = transformBqrsResultSet(schema, chunk);
495496

496497
const parsedResultSets: ParsedResultSets = {
497498
pageNumber,
499+
pageSize: PAGE_SIZE.getValue(),
498500
resultSet: { t: 'RawResultSet', ...resultSet },
499501
numPages: numPagesOfResultSet(resultSet),
500502
numInterpretedPages: numInterpretedPages(this._interpretation),
@@ -559,8 +561,8 @@ export class InterfaceManager extends DisposableObject {
559561
function getPageOfRun(run: Sarif.Run): Sarif.Run {
560562
return {
561563
...run, results: run.results?.slice(
562-
INTERPRETED_RESULTS_PAGE_SIZE * pageNumber,
563-
INTERPRETED_RESULTS_PAGE_SIZE * (pageNumber + 1)
564+
PAGE_SIZE.getValue<number>() * pageNumber,
565+
PAGE_SIZE.getValue<number>() * (pageNumber + 1)
564566
)
565567
};
566568
}

extensions/ql-vscode/src/pure/interface-types.ts

+2-10
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,6 @@ export type ResultSet = RawTableResultSet | PathTableResultSet;
2323
*/
2424
export const RAW_RESULTS_LIMIT = 10000;
2525

26-
/**
27-
* Show this many rows in a raw result table at a time.
28-
*/
29-
export const RAW_RESULTS_PAGE_SIZE = 100;
30-
31-
/**
32-
* Show this many rows in an interpreted results table at a time.
33-
*/
34-
export const INTERPRETED_RESULTS_PAGE_SIZE = 100;
35-
3626
export interface DatabaseInfo {
3727
name: string;
3828
databaseUri: string;
@@ -124,6 +114,7 @@ export interface ShowInterpretedPageMsg {
124114
metadata?: QueryMetadata;
125115
pageNumber: number;
126116
numPages: number;
117+
pageSize: number;
127118
resultSetNames: string[];
128119
}
129120

@@ -352,6 +343,7 @@ export function getDefaultResultSetName(
352343

353344
export interface ParsedResultSets {
354345
pageNumber: number;
346+
pageSize: number;
355347
numPages: number;
356348
numInterpretedPages: number;
357349
selectedTable?: string; // when undefined, means 'show default table'

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

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
QueryMetadata,
77
ResultsPaths,
88
InterpretedResultsSortState,
9-
RAW_RESULTS_PAGE_SIZE,
109
ResultSet,
1110
ALERTS_TABLE_NAME,
1211
SELECT_TABLE_NAME,
@@ -100,7 +99,7 @@ export class ResultTables
10099
return resultSets;
101100
}
102101

103-
private getResultSetNames(resultSets: ResultSet[]): string[] {
102+
private getResultSetNames(): string[] {
104103
return this.props.parsedResultSets.resultSetNames.concat([ALERTS_TABLE_NAME]);
105104
}
106105

@@ -169,7 +168,7 @@ export class ResultTables
169168

170169
getOffset(): number {
171170
const { parsedResultSets } = this.props;
172-
return parsedResultSets.pageNumber * RAW_RESULTS_PAGE_SIZE;
171+
return parsedResultSets.pageNumber * parsedResultSets.pageSize;
173172
}
174173

175174
renderPageButtons(): JSX.Element {
@@ -220,6 +219,8 @@ export class ResultTables
220219
type="number"
221220
size={3}
222221
value={this.state.selectedPage}
222+
min="1"
223+
max={numPages}
223224
onChange={onChange}
224225
onBlur={e => choosePage(e.target.value)}
225226
onKeyDown={e => {
@@ -239,7 +240,7 @@ export class ResultTables
239240
render(): React.ReactNode {
240241
const { selectedTable } = this.state;
241242
const resultSets = this.getResultSets();
242-
const resultSetNames = this.getResultSetNames(resultSets);
243+
const resultSetNames = this.getResultSetNames();
243244

244245
const resultSet = resultSets.find(resultSet => resultSet.schema.name == selectedTable);
245246
const nonemptyRawResults = resultSets.some(resultSet => resultSet.t == 'RawResultSet' && resultSet.rows.length > 0);

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

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class App extends React.Component<{}, ResultsViewState> {
105105
resultsPath: '', // FIXME: Not used for interpreted, refactor so this is not needed
106106
parsedResultSets: {
107107
numPages: msg.numPages,
108+
pageSize: msg.pageSize,
108109
numInterpretedPages: msg.numPages,
109110
resultSetNames: msg.resultSetNames,
110111
pageNumber: msg.pageNumber,

0 commit comments

Comments
 (0)