Skip to content

Commit e7192eb

Browse files
committed
Remove WebviewParsed branch from ParsedResultSets
Also remove dead code downstream from it.
1 parent 379b69a commit e7192eb

4 files changed

Lines changed: 28 additions & 165 deletions

File tree

extensions/ql-vscode/src/adapt.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export function adaptBqrs(schema: AdaptedSchema, page: DecodedBqrsChunk): RawRes
110110
* for this transition is to make pagination possible in such a way
111111
* that only one page needs to be sent from the extension to the webview.
112112
*/
113-
export type ParsedResultSets = ExtensionParsedResultSets | WebviewParsedResultSets;
113+
export type ParsedResultSets = ExtensionParsedResultSets;
114114

115115
/**
116116
* The old method doesn't require any nontrivial information to be included here,

extensions/ql-vscode/src/interface.ts

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import {
4141
ParsedResultSets,
4242
RawResultSet,
4343
} from './adapt';
44-
import { EXPERIMENTAL_BQRS_SETTING } from './config';
4544
import {
4645
WebviewReveal,
4746
fileUriToWebviewUri,
@@ -335,40 +334,34 @@ export class InterfaceManager extends DisposableObject {
335334
}
336335

337336
const getParsedResultSets = async (): Promise<ParsedResultSets> => {
338-
if (EXPERIMENTAL_BQRS_SETTING.getValue()) {
339-
const resultSetSchemas = await this.getResultSetSchemas(results);
340-
const resultSetNames = resultSetSchemas.map(schema => schema.name);
341-
342-
// This may not wind up being the page we actually show, if there are interpreted results,
343-
// but speculatively send it anyway.
344-
const selectedTable = getDefaultResultSetName(resultSetNames);
345-
const schema = resultSetSchemas.find(
346-
(resultSet) => resultSet.name == selectedTable
347-
)!;
348-
if (schema === undefined) {
349-
return { t: 'WebviewParsed' };
350-
}
351337

352-
const chunk = await this.cliServer.bqrsDecode(
353-
results.query.resultsPaths.resultsPath,
354-
schema.name,
355-
RAW_RESULTS_PAGE_SIZE,
356-
schema.pagination?.offsets[0]
357-
);
358-
const adaptedSchema = adaptSchema(schema);
359-
const resultSet = adaptBqrs(adaptedSchema, chunk);
360-
return {
361-
t: 'ExtensionParsed',
362-
pageNumber: 0,
363-
numPages: numPagesOfResultSet(resultSet),
364-
numInterpretedPages: numInterpretedPages(this._interpretation),
365-
resultSet: { t: 'RawResultSet', ...resultSet },
366-
selectedTable: undefined,
367-
resultSetNames,
368-
};
369-
} else {
370-
return { t: 'WebviewParsed' };
371-
}
338+
const resultSetSchemas = await this.getResultSetSchemas(results);
339+
const resultSetNames = resultSetSchemas.map(schema => schema.name);
340+
341+
// This may not wind up being the page we actually show, if there are interpreted results,
342+
// but speculatively send it anyway.
343+
const selectedTable = getDefaultResultSetName(resultSetNames);
344+
const schema = resultSetSchemas.find(
345+
(resultSet) => resultSet.name == selectedTable
346+
)!;
347+
348+
const chunk = await this.cliServer.bqrsDecode(
349+
results.query.resultsPaths.resultsPath,
350+
schema.name,
351+
RAW_RESULTS_PAGE_SIZE,
352+
schema.pagination?.offsets[0]
353+
);
354+
const adaptedSchema = adaptSchema(schema);
355+
const resultSet = adaptBqrs(adaptedSchema, chunk);
356+
return {
357+
t: 'ExtensionParsed',
358+
pageNumber: 0,
359+
numPages: numPagesOfResultSet(resultSet),
360+
numInterpretedPages: numInterpretedPages(this._interpretation),
361+
resultSet: { t: 'RawResultSet', ...resultSet },
362+
selectedTable: undefined,
363+
resultSetNames,
364+
};
372365
};
373366

374367
await this.postMessage({

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,6 @@ export class ResultTables
117117
case 'ExtensionParsed':
118118
selectedPage = (props.parsedResultSets.pageNumber + 1) + '';
119119
break;
120-
case 'WebviewParsed':
121-
selectedPage = '';
122-
break;
123120
}
124121
this.state = { selectedTable, selectedPage };
125122
}
@@ -167,8 +164,6 @@ export class ResultTables
167164
switch (parsedResultSets.t) {
168165
case 'ExtensionParsed':
169166
return parsedResultSets.pageNumber * RAW_RESULTS_PAGE_SIZE;
170-
case 'WebviewParsed':
171-
return 0;
172167
}
173168
}
174169

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

Lines changed: 0 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
import * as React from 'react';
22
import * as Rdom from 'react-dom';
3-
import * as bqrs from 'semmle-bqrs';
4-
import {
5-
ElementBase,
6-
PrimitiveColumnValue,
7-
PrimitiveTypeKind,
8-
tryGetResolvableLocation,
9-
} from 'semmle-bqrs';
103
import { assertNever } from '../helpers-pure';
114
import {
125
DatabaseInfo,
@@ -22,8 +15,6 @@ import {
2215
import { EventHandlers as EventHandlerList } from './event-handler-list';
2316
import { ResultTables } from './result-tables';
2417
import {
25-
ResultValue,
26-
ResultRow,
2718
ParsedResultSets,
2819
} from '../adapt';
2920
import { ResultSet } from '../interface-types';
@@ -36,91 +27,6 @@ import { vscode } from './vscode-api';
3627
* Displaying query results.
3728
*/
3829

39-
async function* getChunkIterator(
40-
response: Response
41-
): AsyncIterableIterator<Uint8Array> {
42-
if (!response.ok) {
43-
throw new Error(
44-
`Failed to load results: (${response.status}) ${response.statusText}`
45-
);
46-
}
47-
const reader = response.body!.getReader();
48-
while (true) {
49-
const { value, done } = await reader.read();
50-
if (done) {
51-
return;
52-
}
53-
yield value!;
54-
}
55-
}
56-
57-
function translatePrimitiveValue(
58-
value: PrimitiveColumnValue,
59-
type: PrimitiveTypeKind
60-
): ResultValue {
61-
switch (type) {
62-
case 'i':
63-
case 'f':
64-
case 's':
65-
case 'd':
66-
case 'b':
67-
return value.toString();
68-
69-
case 'u':
70-
return {
71-
uri: value as string,
72-
};
73-
}
74-
}
75-
76-
async function parseResultSets(
77-
response: Response
78-
): Promise<readonly ResultSet[]> {
79-
const chunks = getChunkIterator(response);
80-
81-
const resultSets: ResultSet[] = [];
82-
83-
await bqrs.parse(chunks, (resultSetSchema) => {
84-
const columnTypes = resultSetSchema.columns.map((column) => column.type);
85-
const rows: ResultRow[] = [];
86-
resultSets.push({
87-
t: 'RawResultSet',
88-
schema: resultSetSchema,
89-
rows: rows,
90-
});
91-
92-
return (tuple) => {
93-
const row: ResultValue[] = [];
94-
tuple.forEach((value, index) => {
95-
const type = columnTypes[index];
96-
if (type.type === 'e') {
97-
const element: ElementBase = value as ElementBase;
98-
const label =
99-
element.label !== undefined ? element.label : element.id.toString(); //REVIEW: URLs?
100-
const resolvableLocation = tryGetResolvableLocation(element.location);
101-
if (resolvableLocation !== undefined) {
102-
row.push({
103-
label: label,
104-
location: resolvableLocation,
105-
});
106-
} else {
107-
// No location link.
108-
row.push(label);
109-
}
110-
} else {
111-
row.push(
112-
translatePrimitiveValue(value as PrimitiveColumnValue, type.type)
113-
);
114-
}
115-
});
116-
117-
rows.push(row);
118-
};
119-
});
120-
121-
return resultSets;
122-
}
123-
12430
interface ResultsInfo {
12531
parsedResultSets: ParsedResultSets;
12632
resultsPath: string;
@@ -270,8 +176,6 @@ class App extends React.Component<{}, ResultsViewState> {
270176
): Promise<readonly ResultSet[]> {
271177
const parsedResultSets = resultsInfo.parsedResultSets;
272178
switch (parsedResultSets.t) {
273-
case 'WebviewParsed':
274-
return await this.fetchResultSets(resultsInfo);
275179
case 'ExtensionParsed': {
276180
return [{ t: 'RawResultSet', ...parsedResultSets.resultSet }];
277181
}
@@ -321,35 +225,6 @@ class App extends React.Component<{}, ResultsViewState> {
321225
});
322226
}
323227

324-
/**
325-
* This is deprecated, because it calls `fetch`. We are moving
326-
* towards doing all bqrs parsing in the extension.
327-
*/
328-
private async fetchResultSets(
329-
resultsInfo: ResultsInfo
330-
): Promise<readonly ResultSet[]> {
331-
const unsortedResponse = await fetch(resultsInfo.resultsPath);
332-
const unsortedResultSets = await parseResultSets(unsortedResponse);
333-
return Promise.all(
334-
unsortedResultSets.map(async (unsortedResultSet) => {
335-
const sortedResultSetInfo = resultsInfo.sortedResultsMap.get(
336-
unsortedResultSet.schema.name
337-
);
338-
if (sortedResultSetInfo === undefined) {
339-
return unsortedResultSet;
340-
}
341-
const response = await fetch(sortedResultSetInfo.resultsPath);
342-
const resultSets = await parseResultSets(response);
343-
if (resultSets.length != 1) {
344-
throw new Error(
345-
`Expected sorted BQRS to contain a single result set, encountered ${resultSets.length} result sets.`
346-
);
347-
}
348-
return resultSets[0];
349-
})
350-
);
351-
}
352-
353228
private getSortStates(
354229
resultsInfo: ResultsInfo
355230
): Map<string, RawResultsSortState> {

0 commit comments

Comments
 (0)