Skip to content

Commit f3a0ad2

Browse files
committed
Use BQRS types for compare view
1 parent 331d39a commit f3a0ad2

File tree

6 files changed

+27
-31
lines changed

6 files changed

+27
-31
lines changed

extensions/ql-vscode/src/common/bqrs-cli-types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type ColumnKind =
2121
| typeof ColumnKindCode.DATE
2222
| typeof ColumnKindCode.ENTITY;
2323

24-
export interface Column {
24+
interface Column {
2525
name?: string;
2626
kind: ColumnKind;
2727
}
@@ -112,7 +112,7 @@ export type BqrsKind =
112112
| "Date"
113113
| "Entity";
114114

115-
interface BqrsColumn {
115+
export interface BqrsColumn {
116116
name?: string;
117117
kind: BqrsKind;
118118
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {
33
RawResultSet,
44
ResultRow,
55
ResultSetSchema,
6-
Column,
76
ResolvableLocationValue,
7+
BqrsColumn,
88
} from "../common/bqrs-cli-types";
99
import {
1010
VariantAnalysis,
@@ -353,7 +353,7 @@ export interface SetComparisonsMessage {
353353
time: string;
354354
};
355355
};
356-
readonly columns: readonly Column[];
356+
readonly columns: readonly BqrsColumn[];
357357
readonly commonResultSetNames: string[];
358358
readonly currentResultSetName: string;
359359
readonly rows: QueryCompareResult | undefined;

extensions/ql-vscode/src/compare/compare-view.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@ import { ViewColumn } from "vscode";
22

33
import {
44
FromCompareViewMessage,
5-
ToCompareViewMessage,
65
QueryCompareResult,
6+
ToCompareViewMessage,
77
} from "../common/interface-types";
88
import { Logger, showAndLogExceptionWithTelemetry } from "../common/logging";
99
import { extLogger } from "../common/logging/vscode";
1010
import { CodeQLCliServer } from "../codeql-cli/cli";
1111
import { DatabaseManager } from "../databases/local-databases";
1212
import { jumpToLocation } from "../databases/local-databases/locations";
13-
import {
14-
transformBqrsResultSet,
15-
RawResultSet,
16-
BQRSInfo,
17-
} from "../common/bqrs-cli-types";
13+
import { BQRSInfo, DecodedBqrsChunk } from "../common/bqrs-cli-types";
1814
import resultsDiff from "./resultsDiff";
1915
import { CompletedLocalQueryInfo } from "../query-results";
2016
import { assertNever, getErrorMessage } from "../common/helpers-pure";
@@ -122,7 +118,7 @@ export class CompareView extends AbstractWebview<
122118
time: to.startTime,
123119
},
124120
},
125-
columns: fromResultSet.schema.columns,
121+
columns: fromResultSet.columns,
126122
commonResultSetNames,
127123
currentResultSetName,
128124
rows,
@@ -197,7 +193,7 @@ export class CompareView extends AbstractWebview<
197193
private async findCommonResultSetNames(
198194
{ from, fromSchemas, to, toSchemas }: ComparePair,
199195
selectedResultSetName: string | undefined,
200-
): Promise<[string[], string, RawResultSet, RawResultSet]> {
196+
): Promise<[string[], string, DecodedBqrsChunk, DecodedBqrsChunk]> {
201197
const {
202198
commonResultSetNames,
203199
currentResultSetDisplayName,
@@ -231,20 +227,19 @@ export class CompareView extends AbstractWebview<
231227
bqrsInfo: BQRSInfo,
232228
resultSetName: string,
233229
resultsPath: string,
234-
): Promise<RawResultSet> {
230+
): Promise<DecodedBqrsChunk> {
235231
const schema = bqrsInfo["result-sets"].find(
236232
(schema) => schema.name === resultSetName,
237233
);
238234
if (!schema) {
239235
throw new Error(`Schema ${resultSetName} not found.`);
240236
}
241-
const chunk = await this.cliServer.bqrsDecode(resultsPath, resultSetName);
242-
return transformBqrsResultSet(schema, chunk);
237+
return await this.cliServer.bqrsDecode(resultsPath, resultSetName);
243238
}
244239

245240
private compareResults(
246-
fromResults: RawResultSet,
247-
toResults: RawResultSet,
241+
fromResults: DecodedBqrsChunk,
242+
toResults: DecodedBqrsChunk,
248243
): QueryCompareResult {
249244
// Only compare columns that have the same name
250245
return resultsDiff(fromResults, toResults);

extensions/ql-vscode/src/compare/resultsDiff.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { RawResultSet } from "../common/bqrs-cli-types";
1+
import { DecodedBqrsChunk } from "../common/bqrs-cli-types";
22
import { QueryCompareResult } from "../common/interface-types";
33

44
/**
@@ -20,29 +20,29 @@ import { QueryCompareResult } from "../common/interface-types";
2020
* 3. If the queries are 100% disjoint
2121
*/
2222
export default function resultsDiff(
23-
fromResults: RawResultSet,
24-
toResults: RawResultSet,
23+
fromResults: DecodedBqrsChunk,
24+
toResults: DecodedBqrsChunk,
2525
): QueryCompareResult {
26-
if (fromResults.schema.columns.length !== toResults.schema.columns.length) {
26+
if (fromResults.columns.length !== toResults.columns.length) {
2727
throw new Error("CodeQL Compare: Columns do not match.");
2828
}
2929

30-
if (!fromResults.rows.length) {
30+
if (!fromResults.tuples.length) {
3131
throw new Error("CodeQL Compare: Source query has no results.");
3232
}
3333

34-
if (!toResults.rows.length) {
34+
if (!toResults.tuples.length) {
3535
throw new Error("CodeQL Compare: Target query has no results.");
3636
}
3737

3838
const results = {
39-
from: arrayDiff(fromResults.rows, toResults.rows),
40-
to: arrayDiff(toResults.rows, fromResults.rows),
39+
from: arrayDiff(fromResults.tuples, toResults.tuples),
40+
to: arrayDiff(toResults.tuples, fromResults.tuples),
4141
};
4242

4343
if (
44-
fromResults.rows.length === results.from.length &&
45-
toResults.rows.length === results.to.length
44+
fromResults.tuples.length === results.from.length &&
45+
toResults.tuples.length === results.to.length
4646
) {
4747
throw new Error("CodeQL Compare: No overlap between the selected queries.");
4848
}

extensions/ql-vscode/src/stories/compare/CompareTable.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ CompareTable.args = {
3232
},
3333
},
3434
columns: [
35-
{ name: "a", kind: "e" },
36-
{ name: "b", kind: "e" },
35+
{ name: "a", kind: "Entity" },
36+
{ name: "b", kind: "Entity" },
3737
],
3838
commonResultSetNames: ["edges", "nodes", "subpaths", "#select"],
3939
currentResultSetName: "edges",

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import {
66
SortDirection,
77
} from "../../common/interface-types";
88
import { nextSortDirection } from "./result-table-utils";
9-
import { Column } from "../../common/bqrs-cli-types";
109

1110
interface Props {
12-
readonly columns: readonly Column[];
11+
readonly columns: ReadonlyArray<{
12+
name?: string;
13+
}>;
1314
readonly schemaName: string;
1415
readonly sortState?: RawResultsSortState;
1516
readonly preventSort?: boolean;

0 commit comments

Comments
 (0)