Simplify query server interface.

This commit is contained in:
alexet
2021-01-11 18:08:33 +00:00
committed by Andrew Eisenberg
parent 70ddbd05be
commit 9cbe5ba2e8
3 changed files with 35 additions and 46 deletions

View File

@@ -425,14 +425,6 @@ export interface CompileUpgradeSequenceParams {
* A directory to store parts of the compiled upgrade
*/
upgradeTempDir: string;
/**
* The first dbscheme in the sequence.
*/
initialDbscheme: string;
/**
* The last dbscheme in the sequence.
*/
finalDbscheme: string;
}
/**
@@ -483,13 +475,18 @@ export interface CompileUpgradeResult {
error?: string;
}
export interface SingleFileCompiledUpgradeResult extends CompileUpgradeResult {
export interface CompiledUpgradeSequence {
/**
* The compiled upgrade.
* The compiled upgrades as a single file.
*/
compiledUpgrades?: SingleFileCompiledUpgrade;
compiledUpgrades?: string;
/**
* Any errors that occurred when checking the scripts.
*/
error?: string;
}
/**
* A description of a upgrade process
*/
@@ -528,7 +525,7 @@ export interface UpgradeDescription {
}
export type CompiledUpgrades = MultiFileCompiledUpgrades | SingleFileCompiledUpgrade
export type CompiledUpgrades = MultiFileCompiledUpgrades | SingleFileCompiledUpgrades
/**
* The parts shared by all compiled upgrades
@@ -573,7 +570,7 @@ interface MultiFileCompiledUpgrades extends CompiledUpgradesBase {
* A compiled upgrade.
* The upgrade is in a single file.
*/
export interface SingleFileCompiledUpgrade extends CompiledUpgradesBase {
export interface SingleFileCompiledUpgrades extends CompiledUpgradesBase {
/**
* The steps in the upgrade path
*/
@@ -1009,8 +1006,7 @@ export const compileUpgrade = new rpc.RequestType<WithProgressId<CompileUpgradeP
/**
* Compile an upgrade script to upgrade a dataset.
*/
export const compileUpgradeSequence = new rpc.RequestType<WithProgressId<CompileUpgradeSequenceParams>, SingleFileCompiledUpgradeResult, void, void>('compilation/compileUpgradeSequence');
export const compileUpgradeSequence = new rpc.RequestType<WithProgressId<CompileUpgradeSequenceParams>, CompiledUpgradeSequence, void, void>('compilation/compileUpgradeSequence');
/**
* Clear the cache of a dataset

View File

@@ -354,7 +354,7 @@ async function compileNonDestructiveUpgrade(
if (!matchesTarget) {
reportNoUpgradePath(query);
}
const result = await compileDatabaseUpgradeSequence(qs, query.dbItem, query.queryDbscheme, scripts, upgradeTemp, progress, token);
const result = await compileDatabaseUpgradeSequence(qs, query.dbItem, scripts, upgradeTemp, progress, token);
if (result.compiledUpgrades === undefined) {
const error = result.error || '[no error message available]';
throw new Error(error);
@@ -362,7 +362,7 @@ async function compileNonDestructiveUpgrade(
// We can upgrade to the actual target
query.program.dbschemePath = query.queryDbscheme;
// We are new enough that we will always support single file upgrades.
return result.compiledUpgrades.compiledUpgradeFile!;
return result.compiledUpgrades;
}

View File

@@ -36,11 +36,10 @@ export async function hasNondestructiveUpgradeCapabilities(qs: qsClient.QuerySer
*/
export async function compileDatabaseUpgradeSequence(qs: qsClient.QueryServerClient,
db: DatabaseItem,
targetDbScheme: string,
resolvedSequence: string[],
currentUpgradeTmp: tmp.DirResult,
progress: ProgressCallback,
token: vscode.CancellationToken): Promise<messages.SingleFileCompiledUpgradeResult> {
token: vscode.CancellationToken): Promise<messages.CompiledUpgradeSequence> {
if (db.contents === undefined || db.contents.dbSchemeUri === undefined) {
throw new Error('Database is invalid, and cannot be upgraded.');
}
@@ -50,8 +49,6 @@ export async function compileDatabaseUpgradeSequence(qs: qsClient.QueryServerCli
// If possible just compile the upgrade sequence
return await qs.sendRequest(messages.compileUpgradeSequence, {
upgradeTempDir: currentUpgradeTmp.name,
finalDbscheme: targetDbScheme,
initialDbscheme: db.contents.dbSchemeUri.fsPath,
upgradePaths: resolvedSequence
}, token, progress);
}
@@ -65,32 +62,28 @@ async function compileDatabaseUpgrade(
progress: ProgressCallback,
token: vscode.CancellationToken
): Promise<messages.CompileUpgradeResult> {
if (await hasNondestructiveUpgradeCapabilities(qs)) {
return await compileDatabaseUpgradeSequence(qs, db, targetDbScheme, resolvedSequence, currentUpgradeTmp, progress, token);
} else {
if (!db.contents?.dbSchemeUri) {
throw new Error('Database is invalid, and cannot be upgraded.');
}
// We have the upgrades we want but compileUpgrade
// requires searching for them. So we use the parent directories of the upgrades
// as the upgrade path.
const parentDirs = resolvedSequence.map(dir => path.dirname(dir));
const uniqueParentDirs = new Set(parentDirs);
progress({
step: 1,
maxStep: 3,
message: 'Checking for database upgrades'
});
return qs.sendRequest(messages.compileUpgrade, {
upgrade: {
fromDbscheme: db.contents.dbSchemeUri.fsPath,
toDbscheme: targetDbScheme,
additionalUpgrades: Array.from(uniqueParentDirs)
},
upgradeTempDir: currentUpgradeTmp.name,
singleFileUpgrades: true,
}, token, progress);
if (!db.contents?.dbSchemeUri) {
throw new Error('Database is invalid, and cannot be upgraded.');
}
// We have the upgrades we want but compileUpgrade
// requires searching for them. So we use the parent directories of the upgrades
// as the upgrade path.
const parentDirs = resolvedSequence.map(dir => path.dirname(dir));
const uniqueParentDirs = new Set(parentDirs);
progress({
step: 1,
maxStep: 3,
message: 'Checking for database upgrades'
});
return qs.sendRequest(messages.compileUpgrade, {
upgrade: {
fromDbscheme: db.contents.dbSchemeUri.fsPath,
toDbscheme: targetDbScheme,
additionalUpgrades: Array.from(uniqueParentDirs)
},
upgradeTempDir: currentUpgradeTmp.name,
singleFileUpgrades: true,
}, token, progress);
}
/**