@@ -46,6 +46,10 @@ import { isCanary } from "../config";
4646import { App } from "../common/app" ;
4747import { redactableError } from "../pure/errors" ;
4848import { LocalDatabasesCommands } from "../common/commands" ;
49+ import {
50+ createMultiSelectionCommand ,
51+ createSingleSelectionCommand ,
52+ } from "../common/selection-commands" ;
4953
5054enum SortOrder {
5155 NameAsc = "NameAsc" ,
@@ -240,11 +244,22 @@ export class DatabaseUI extends DisposableObject {
240244 this . handleMakeCurrentDatabase . bind ( this ) ,
241245 "codeQLDatabases.sortByName" : this . handleSortByName . bind ( this ) ,
242246 "codeQLDatabases.sortByDateAdded" : this . handleSortByDateAdded . bind ( this ) ,
243- "codeQLDatabases.removeDatabase" : this . handleRemoveDatabase . bind ( this ) ,
244- "codeQLDatabases.upgradeDatabase" : this . handleUpgradeDatabase . bind ( this ) ,
245- "codeQLDatabases.renameDatabase" : this . handleRenameDatabase . bind ( this ) ,
246- "codeQLDatabases.openDatabaseFolder" : this . handleOpenFolder . bind ( this ) ,
247- "codeQLDatabases.addDatabaseSource" : this . handleAddSource . bind ( this ) ,
247+ "codeQLDatabases.removeDatabase" : createMultiSelectionCommand (
248+ this . handleRemoveDatabase . bind ( this ) ,
249+ ) ,
250+ "codeQLDatabases.upgradeDatabase" : createMultiSelectionCommand (
251+ this . handleUpgradeDatabase . bind ( this ) ,
252+ ) ,
253+ "codeQLDatabases.renameDatabase" : createSingleSelectionCommand (
254+ this . handleRenameDatabase . bind ( this ) ,
255+ "database" ,
256+ ) ,
257+ "codeQLDatabases.openDatabaseFolder" : createMultiSelectionCommand (
258+ this . handleOpenFolder . bind ( this ) ,
259+ ) ,
260+ "codeQLDatabases.addDatabaseSource" : createMultiSelectionCommand (
261+ this . handleAddSource . bind ( this ) ,
262+ ) ,
248263 "codeQLDatabases.removeOrphanedDatabases" :
249264 this . handleRemoveOrphanedDatabases . bind ( this ) ,
250265 } ;
@@ -515,12 +530,11 @@ export class DatabaseUI extends DisposableObject {
515530 private async handleUpgradeCurrentDatabase ( ) : Promise < void > {
516531 return withProgress (
517532 async ( progress , token ) => {
518- await this . handleUpgradeDatabaseInternal (
519- progress ,
520- token ,
521- this . databaseManager . currentDatabaseItem ,
522- [ ] ,
523- ) ;
533+ if ( this . databaseManager . currentDatabaseItem !== undefined ) {
534+ await this . handleUpgradeDatabasesInternal ( progress , token , [
535+ this . databaseManager . currentDatabaseItem ,
536+ ] ) ;
537+ }
524538 } ,
525539 {
526540 title : "Upgrading current database" ,
@@ -530,16 +544,14 @@ export class DatabaseUI extends DisposableObject {
530544 }
531545
532546 private async handleUpgradeDatabase (
533- databaseItem : DatabaseItem | undefined ,
534- multiSelect : DatabaseItem [ ] | undefined ,
547+ databaseItems : DatabaseItem [ ] ,
535548 ) : Promise < void > {
536549 return withProgress (
537550 async ( progress , token ) => {
538- return await this . handleUpgradeDatabaseInternal (
551+ return await this . handleUpgradeDatabasesInternal (
539552 progress ,
540553 token ,
541- databaseItem ,
542- multiSelect ,
554+ databaseItems ,
543555 ) ;
544556 } ,
545557 {
@@ -549,46 +561,37 @@ export class DatabaseUI extends DisposableObject {
549561 ) ;
550562 }
551563
552- private async handleUpgradeDatabaseInternal (
564+ private async handleUpgradeDatabasesInternal (
553565 progress : ProgressCallback ,
554566 token : CancellationToken ,
555- databaseItem : DatabaseItem | undefined ,
556- multiSelect : DatabaseItem [ ] | undefined ,
567+ databaseItems : DatabaseItem [ ] ,
557568 ) : Promise < void > {
558- if ( multiSelect ?. length ) {
559- await Promise . all (
560- multiSelect . map ( ( dbItem ) =>
561- this . handleUpgradeDatabaseInternal ( progress , token , dbItem , [ ] ) ,
562- ) ,
563- ) ;
564- }
565- if ( this . queryServer === undefined ) {
566- throw new Error (
567- "Received request to upgrade database, but there is no running query server." ,
568- ) ;
569- }
570- if ( databaseItem === undefined ) {
571- throw new Error (
572- "Received request to upgrade database, but no database was provided." ,
573- ) ;
574- }
575- if ( databaseItem . contents === undefined ) {
576- throw new Error (
577- "Received request to upgrade database, but database contents could not be found." ,
578- ) ;
579- }
580- if ( databaseItem . contents . dbSchemeUri === undefined ) {
581- throw new Error (
582- "Received request to upgrade database, but database has no schema." ,
583- ) ;
584- }
569+ await Promise . all (
570+ databaseItems . map ( async ( databaseItem ) => {
571+ if ( this . queryServer === undefined ) {
572+ throw new Error (
573+ "Received request to upgrade database, but there is no running query server." ,
574+ ) ;
575+ }
576+ if ( databaseItem . contents === undefined ) {
577+ throw new Error (
578+ "Received request to upgrade database, but database contents could not be found." ,
579+ ) ;
580+ }
581+ if ( databaseItem . contents . dbSchemeUri === undefined ) {
582+ throw new Error (
583+ "Received request to upgrade database, but database has no schema." ,
584+ ) ;
585+ }
585586
586- // Search for upgrade scripts in any workspace folders available
587+ // Search for upgrade scripts in any workspace folders available
587588
588- await this . queryServer . upgradeDatabaseExplicit (
589- databaseItem ,
590- progress ,
591- token ,
589+ await this . queryServer . upgradeDatabaseExplicit (
590+ databaseItem ,
591+ progress ,
592+ token ,
593+ ) ;
594+ } ) ,
592595 ) ;
593596 }
594597
@@ -651,24 +654,15 @@ export class DatabaseUI extends DisposableObject {
651654 }
652655
653656 private async handleRemoveDatabase (
654- databaseItem : DatabaseItem ,
655- multiSelect : DatabaseItem [ ] | undefined ,
657+ databaseItems : DatabaseItem [ ] ,
656658 ) : Promise < void > {
657659 return withProgress (
658660 async ( progress , token ) => {
659- if ( multiSelect ?. length ) {
660- await Promise . all (
661- multiSelect . map ( ( dbItem ) =>
662- this . databaseManager . removeDatabaseItem ( progress , token , dbItem ) ,
663- ) ,
664- ) ;
665- } else {
666- await this . databaseManager . removeDatabaseItem (
667- progress ,
668- token ,
669- databaseItem ,
670- ) ;
671- }
661+ await Promise . all (
662+ databaseItems . map ( ( dbItem ) =>
663+ this . databaseManager . removeDatabaseItem ( progress , token , dbItem ) ,
664+ ) ,
665+ ) ;
672666 } ,
673667 {
674668 title : "Removing database" ,
@@ -679,10 +673,7 @@ export class DatabaseUI extends DisposableObject {
679673
680674 private async handleRenameDatabase (
681675 databaseItem : DatabaseItem ,
682- multiSelect : DatabaseItem [ ] | undefined ,
683676 ) : Promise < void > {
684- this . assertSingleDatabase ( multiSelect ) ;
685-
686677 const newName = await window . showInputBox ( {
687678 prompt : "Choose new database name" ,
688679 value : databaseItem . name ,
@@ -693,34 +684,20 @@ export class DatabaseUI extends DisposableObject {
693684 }
694685 }
695686
696- private async handleOpenFolder (
697- databaseItem : DatabaseItem ,
698- multiSelect : DatabaseItem [ ] | undefined ,
699- ) : Promise < void > {
700- if ( multiSelect ?. length ) {
701- await Promise . all (
702- multiSelect . map ( ( dbItem ) => env . openExternal ( dbItem . databaseUri ) ) ,
703- ) ;
704- } else {
705- await env . openExternal ( databaseItem . databaseUri ) ;
706- }
687+ private async handleOpenFolder ( databaseItems : DatabaseItem [ ] ) : Promise < void > {
688+ await Promise . all (
689+ databaseItems . map ( ( dbItem ) => env . openExternal ( dbItem . databaseUri ) ) ,
690+ ) ;
707691 }
708692
709693 /**
710694 * Adds the source folder of a CodeQL database to the workspace.
711695 * When a database is first added in the "Databases" view, its source folder is added to the workspace.
712696 * If the source folder is removed from the workspace for some reason, we want to be able to re-add it if need be.
713697 */
714- private async handleAddSource (
715- databaseItem : DatabaseItem ,
716- multiSelect : DatabaseItem [ ] | undefined ,
717- ) : Promise < void > {
718- if ( multiSelect ?. length ) {
719- for ( const dbItem of multiSelect ) {
720- await this . databaseManager . addDatabaseSourceArchiveFolder ( dbItem ) ;
721- }
722- } else {
723- await this . databaseManager . addDatabaseSourceArchiveFolder ( databaseItem ) ;
698+ private async handleAddSource ( databaseItems : DatabaseItem [ ] ) : Promise < void > {
699+ for ( const dbItem of databaseItems ) {
700+ await this . databaseManager . addDatabaseSourceArchiveFolder ( dbItem ) ;
724701 }
725702 }
726703
@@ -823,13 +800,4 @@ export class DatabaseUI extends DisposableObject {
823800 }
824801 return Uri . file ( dbPath ) ;
825802 }
826-
827- private assertSingleDatabase (
828- multiSelect : DatabaseItem [ ] = [ ] ,
829- message = "Please select a single database." ,
830- ) {
831- if ( multiSelect . length > 1 ) {
832- throw new Error ( message ) ;
833- }
834- }
835803}
0 commit comments