@@ -2,7 +2,6 @@ import { env } from 'vscode';
22
33import { QueryWithResults , tmpDir , QueryInfo } from './run-queries' ;
44import * as messages from './messages' ;
5- import * as helpers from './helpers' ;
65import * as cli from './cli' ;
76import * as sarif from 'sarif' ;
87import * as fs from 'fs-extra' ;
@@ -53,7 +52,7 @@ export class CompletedQuery implements QueryWithResults {
5352 return this . database . name ;
5453 }
5554 get queryName ( ) : string {
56- return helpers . getQueryName ( this . query ) ;
55+ return getQueryName ( this . query ) ;
5756 }
5857
5958 get statusString ( ) : string {
@@ -72,6 +71,13 @@ export class CompletedQuery implements QueryWithResults {
7271 }
7372 }
7473
74+ getResultsPath ( selectedTable : string , useSorted = true ) : string {
75+ if ( ! useSorted ) {
76+ return this . query . resultsPaths . resultsPath ;
77+ }
78+ return this . sortedResultsInfo . get ( selectedTable ) ?. resultsPath
79+ || this . query . resultsPaths . resultsPath ;
80+ }
7581
7682 interpolate ( template : string ) : string {
7783 const { databaseName, queryName, time, statusString } = this ;
@@ -89,9 +95,8 @@ export class CompletedQuery implements QueryWithResults {
8995 }
9096
9197 getLabel ( ) : string {
92- if ( this . options . label !== undefined )
93- return this . options . label ;
94- return this . config . format ;
98+ return this . options ?. label
99+ || this . config . format ;
95100 }
96101
97102 get didRunSuccessfully ( ) : boolean {
@@ -102,7 +107,11 @@ export class CompletedQuery implements QueryWithResults {
102107 return this . interpolate ( this . getLabel ( ) ) ;
103108 }
104109
105- async updateSortState ( server : cli . CodeQLCliServer , resultSetName : string , sortState : RawResultsSortState | undefined ) : Promise < void > {
110+ async updateSortState (
111+ server : cli . CodeQLCliServer ,
112+ resultSetName : string ,
113+ sortState ?: RawResultsSortState
114+ ) : Promise < void > {
106115 if ( sortState === undefined ) {
107116 this . sortedResultsInfo . delete ( resultSetName ) ;
108117 return ;
@@ -113,19 +122,50 @@ export class CompletedQuery implements QueryWithResults {
113122 sortState
114123 } ;
115124
116- await server . sortBqrs ( this . query . resultsPaths . resultsPath , sortedResultSetInfo . resultsPath , resultSetName , [ sortState . columnIndex ] , [ sortState . sortDirection ] ) ;
125+ await server . sortBqrs (
126+ this . query . resultsPaths . resultsPath ,
127+ sortedResultSetInfo . resultsPath ,
128+ resultSetName ,
129+ [ sortState . columnIndex ] ,
130+ [ sortState . sortDirection ]
131+ ) ;
117132 this . sortedResultsInfo . set ( resultSetName , sortedResultSetInfo ) ;
118133 }
119134
120- async updateInterpretedSortState ( sortState : InterpretedResultsSortState | undefined ) : Promise < void > {
135+ async updateInterpretedSortState ( sortState ? : InterpretedResultsSortState ) : Promise < void > {
121136 this . interpretedResultsSortState = sortState ;
122137 }
123138}
124139
140+
141+ /**
142+ * Gets a human-readable name for an evaluated query.
143+ * Uses metadata if it exists, and defaults to the query file name.
144+ */
145+ export function getQueryName ( query : QueryInfo ) {
146+ // Queries run through quick evaluation are not usually the entire query file.
147+ // Label them differently and include the line numbers.
148+ if ( query . quickEvalPosition !== undefined ) {
149+ const { line, endLine, fileName } = query . quickEvalPosition ;
150+ const lineInfo = line === endLine ? `${ line } ` : `${ line } -${ endLine } ` ;
151+ return `Quick evaluation of ${ path . basename ( fileName ) } :${ lineInfo } ` ;
152+ } else if ( query . metadata ?. name ) {
153+ return query . metadata . name ;
154+ } else {
155+ return path . basename ( query . program . queryPath ) ;
156+ }
157+ }
158+
159+
125160/**
126161 * Call cli command to interpret results.
127162 */
128- export async function interpretResults ( server : cli . CodeQLCliServer , metadata : QueryMetadata | undefined , resultsPaths : ResultsPaths , sourceInfo ?: cli . SourceInfo ) : Promise < sarif . Log > {
163+ export async function interpretResults (
164+ server : cli . CodeQLCliServer ,
165+ metadata : QueryMetadata | undefined ,
166+ resultsPaths : ResultsPaths ,
167+ sourceInfo ?: cli . SourceInfo
168+ ) : Promise < sarif . Log > {
129169 const { resultsPath, interpretedResultsPath } = resultsPaths ;
130170 if ( await fs . pathExists ( interpretedResultsPath ) ) {
131171 return JSON . parse ( await fs . readFile ( interpretedResultsPath , 'utf8' ) ) ;
0 commit comments