@@ -20,11 +20,15 @@ const MAX_UPGRADE_MESSAGE_LINES = 10;
2020 * @returns the `UpgradeParams` needed to start the upgrade, if the upgrade is possible and was confirmed by the user, or `undefined` otherwise.
2121 */
2222async function checkAndConfirmDatabaseUpgrade (
23- qs : qsClient . QueryServerClient , db : DatabaseItem , targetDbScheme : vscode . Uri , upgradesDirectories : vscode . Uri [ ]
23+ qs : qsClient . QueryServerClient ,
24+ db : DatabaseItem ,
25+ targetDbScheme : vscode . Uri ,
26+ upgradesDirectories : vscode . Uri [ ] ,
27+ progress : helpers . ProgressCallback ,
28+ token : vscode . CancellationToken ,
2429) : Promise < messages . UpgradeParams | undefined > {
2530 if ( db . contents === undefined || db . contents . dbSchemeUri === undefined ) {
26- helpers . showAndLogErrorMessage ( 'Database is invalid, and cannot be upgraded.' ) ;
27- return ;
31+ throw new Error ( 'Database is invalid, and cannot be upgraded.' ) ;
2832 }
2933 const params : messages . UpgradeParams = {
3034 fromDbscheme : db . contents . dbSchemeUri . fsPath ,
@@ -35,11 +39,10 @@ async function checkAndConfirmDatabaseUpgrade(
3539 let checkUpgradeResult : messages . CheckUpgradeResult ;
3640 try {
3741 qs . logger . log ( 'Checking database upgrade...' ) ;
38- checkUpgradeResult = await checkDatabaseUpgrade ( qs , params ) ;
42+ checkUpgradeResult = await checkDatabaseUpgrade ( qs , params , progress , token ) ;
3943 }
4044 catch ( e ) {
41- helpers . showAndLogErrorMessage ( `Database cannot be upgraded: ${ e } ` ) ;
42- return ;
45+ throw new Error ( `Database cannot be upgraded: ${ e } ` ) ;
4346 }
4447 finally {
4548 qs . logger . log ( 'Done checking database upgrade.' ) ;
@@ -48,12 +51,15 @@ async function checkAndConfirmDatabaseUpgrade(
4851 const checkedUpgrades = checkUpgradeResult . checkedUpgrades ;
4952 if ( checkedUpgrades === undefined ) {
5053 const error = checkUpgradeResult . upgradeError || '[no error message available]' ;
51- await helpers . showAndLogErrorMessage ( `Database cannot be upgraded: ${ error } ` ) ;
52- return ;
54+ throw new Error ( `Database cannot be upgraded: ${ error } ` ) ;
5355 }
5456
5557 if ( checkedUpgrades . scripts . length === 0 ) {
56- await helpers . showAndLogInformationMessage ( 'Database is already up to date; nothing to do.' ) ;
58+ progress ( {
59+ step : 3 ,
60+ maxStep : 3 ,
61+ message : 'Database is already up to date; nothing to do.'
62+ } ) ;
5763 return ;
5864 }
5965
@@ -114,17 +120,19 @@ async function checkAndConfirmDatabaseUpgrade(
114120export async function upgradeDatabase (
115121 qs : qsClient . QueryServerClient ,
116122 db : DatabaseItem , targetDbScheme : vscode . Uri ,
117- upgradesDirectories : vscode . Uri [ ]
123+ upgradesDirectories : vscode . Uri [ ] ,
124+ progress : helpers . ProgressCallback ,
125+ token : vscode . CancellationToken ,
118126) : Promise < messages . RunUpgradeResult | undefined > {
119- const upgradeParams = await checkAndConfirmDatabaseUpgrade ( qs , db , targetDbScheme , upgradesDirectories ) ;
127+ const upgradeParams = await checkAndConfirmDatabaseUpgrade ( qs , db , targetDbScheme , upgradesDirectories , progress , token ) ;
120128
121129 if ( upgradeParams === undefined ) {
122130 return ;
123131 }
124132
125133 let compileUpgradeResult : messages . CompileUpgradeResult ;
126134 try {
127- compileUpgradeResult = await compileDatabaseUpgrade ( qs , upgradeParams ) ;
135+ compileUpgradeResult = await compileDatabaseUpgrade ( qs , upgradeParams , progress , token ) ;
128136 }
129137 catch ( e ) {
130138 helpers . showAndLogErrorMessage ( `Compilation of database upgrades failed: ${ e } ` ) ;
@@ -143,7 +151,7 @@ export async function upgradeDatabase(
143151 try {
144152 qs . logger . log ( 'Running the following database upgrade:' ) ;
145153 qs . logger . log ( compileUpgradeResult . compiledUpgrades . scripts . map ( s => s . description . description ) . join ( '\n' ) ) ;
146- return await runDatabaseUpgrade ( qs , db , compileUpgradeResult . compiledUpgrades ) ;
154+ return await runDatabaseUpgrade ( qs , db , compileUpgradeResult . compiledUpgrades , progress , token ) ;
147155 }
148156 catch ( e ) {
149157 helpers . showAndLogErrorMessage ( `Database upgrade failed: ${ e } ` ) ;
@@ -155,34 +163,46 @@ export async function upgradeDatabase(
155163}
156164
157165async function checkDatabaseUpgrade (
158- qs : qsClient . QueryServerClient , upgradeParams : messages . UpgradeParams
166+ qs : qsClient . QueryServerClient ,
167+ upgradeParams : messages . UpgradeParams ,
168+ progress : helpers . ProgressCallback ,
169+ token : vscode . CancellationToken ,
159170) : Promise < messages . CheckUpgradeResult > {
160- // Avoid using commandRunner here because this function might be called upon extension activation
161- return helpers . withProgress ( {
162- location : vscode . ProgressLocation . Notification ,
163- title : 'Checking for database upgrades' ,
164- cancellable : true ,
165- } , ( progress , token ) => qs . sendRequest ( messages . checkUpgrade , upgradeParams , token , progress ) ) ;
171+ progress ( {
172+ step : 1 ,
173+ maxStep : 3 ,
174+ message : 'Checking for database upgrades'
175+ } ) ;
176+
177+ return qs . sendRequest ( messages . checkUpgrade , upgradeParams , token , progress ) ;
166178}
167179
168180async function compileDatabaseUpgrade (
169- qs : qsClient . QueryServerClient , upgradeParams : messages . UpgradeParams
181+ qs : qsClient . QueryServerClient ,
182+ upgradeParams : messages . UpgradeParams ,
183+ progress : helpers . ProgressCallback ,
184+ token : vscode . CancellationToken ,
170185) : Promise < messages . CompileUpgradeResult > {
171186 const params : messages . CompileUpgradeParams = {
172187 upgrade : upgradeParams ,
173188 upgradeTempDir : upgradesTmpDir . name
174189 } ;
175190
176- // Avoid using commandRunner here because this function might be called upon extension activation
177- return helpers . withProgress ( {
178- location : vscode . ProgressLocation . Notification ,
179- title : 'Compiling database upgrades' ,
180- cancellable : true ,
181- } , ( progress , token ) => qs . sendRequest ( messages . compileUpgrade , params , token , progress ) ) ;
191+ progress ( {
192+ step : 2 ,
193+ maxStep : 3 ,
194+ message : 'Compiling database upgrades'
195+ } ) ;
196+
197+ return qs . sendRequest ( messages . compileUpgrade , params , token , progress ) ;
182198}
183199
184200async function runDatabaseUpgrade (
185- qs : qsClient . QueryServerClient , db : DatabaseItem , upgrades : messages . CompiledUpgrades
201+ qs : qsClient . QueryServerClient ,
202+ db : DatabaseItem ,
203+ upgrades : messages . CompiledUpgrades ,
204+ progress : helpers . ProgressCallback ,
205+ token : vscode . CancellationToken ,
186206) : Promise < messages . RunUpgradeResult > {
187207
188208 if ( db . contents === undefined || db . contents . datasetUri === undefined ) {
@@ -199,10 +219,5 @@ async function runDatabaseUpgrade(
199219 toRun : upgrades
200220 } ;
201221
202- // Avoid using commandRunner here because this function might be called upon extension activation
203- return helpers . withProgress ( {
204- location : vscode . ProgressLocation . Notification ,
205- title : 'Running database upgrades' ,
206- cancellable : true ,
207- } , ( progress , token ) => qs . sendRequest ( messages . runUpgrade , params , token , progress ) ) ;
222+ return qs . sendRequest ( messages . runUpgrade , params , token , progress ) ;
208223}
0 commit comments