Skip to content

Commit d3d40c0

Browse files
committed
Add option to grab job when it's safe to do so
Signed-off-by: worksofliam <mrliamallan@live.co.uk>
1 parent 69d7c08 commit d3d40c0

File tree

6 files changed

+19
-13
lines changed

6 files changed

+19
-13
lines changed

src/connection/syntaxChecker/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { posix } from "path";
44
import { getValidatorSource, VALIDATOR_NAME, WRAPPER_NAME } from "./checker";
55
import { JobManager } from "../../config";
66
import { getBase, getInstance } from "../../base";
7+
import { JobInfo } from "../manager";
78

89
interface SqlCheckError {
910
CURSTMTLENGTH: number;
@@ -134,14 +135,13 @@ export class SQLStatementChecker implements IBMiComponent {
134135
return undefined;
135136
}
136137

137-
async checkMultipleStatements(statements: string[]): Promise<SqlSyntaxError[]|undefined> {
138+
async checkMultipleStatements(currentJob: JobInfo, statements: string[]): Promise<SqlSyntaxError[]|undefined> {
138139
const connection = getInstance()?.getConnection();
139140
if (!connection) return undefined;
140141

141-
const currentJob = JobManager.getSelection();
142142
const library = this.getLibrary(connection);
143143

144-
if (currentJob && library) {
144+
if (library) {
145145
const checks = statements.map(stmt => `select * from table(${library}.${this.functionName}(?)) x`).join(` union all `);
146146
const stmt = currentJob.job.query<SqlCheckError>(checks, {parameters: statements});
147147
const result = await stmt.execute(statements.length);

src/language/providers/completionProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ export const completionProvider = languages.registerCompletionItemProvider(
611611
allItems.push(...getLocalDefs(sqlDoc, offset))
612612
}
613613

614-
if (remoteAssistIsEnabled() && currentStatement) {
614+
if (remoteAssistIsEnabled(false) && currentStatement) {
615615
allItems.push(...await getCompletionItems(trigger, currentStatement, offset))
616616
}
617617

src/language/providers/hoverProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const openProvider = workspace.onDidOpenTextDocument(async (document) =>
6060

6161
export const hoverProvider = languages.registerHoverProvider({ language: `sql` }, {
6262
async provideHover(document, position, token) {
63-
if (!remoteAssistIsEnabled()) return;
63+
if (!remoteAssistIsEnabled(true)) return;
6464

6565
const defaultSchema = getDefaultSchema();
6666
const sqlDoc = getSqlDocument(document);

src/language/providers/logic/available.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22
import { env } from "process";
33
import { ServerComponent } from "../../../connection/serverComponent";
44
import { JobManager } from "../../../config";
5+
import { JobInfo } from "../../../connection/manager";
56

67
export function localAssistIsEnabled() {
78
return (env.DB2I_DISABLE_CA !== `true`);
89
}
910

10-
export function remoteAssistIsEnabled() {
11-
return localAssistIsEnabled() && ServerComponent.isInstalled() && JobManager.getSelection() !== undefined;
11+
export function remoteAssistIsEnabled(needsToBeReady?: boolean): JobInfo|undefined {
12+
if (!localAssistIsEnabled()) return;
13+
if (!ServerComponent.isInstalled()) return;
14+
15+
const selection = JobManager.getSelection();
16+
if (!selection) return;
17+
if (selection.job.getStatus() !== `ready` && needsToBeReady) return;
18+
19+
return selection;
1220
}

src/language/providers/parameterProvider.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import { getSqlDocument } from "./logic/parse";
1111

1212
export const signatureProvider = languages.registerSignatureHelpProvider({ language: `sql` }, {
1313
async provideSignatureHelp(document, position, token, context) {
14-
const content = document.getText();
1514
const offset = document.offsetAt(position);
16-
15+
1716
if (remoteAssistIsEnabled()) {
1817

1918
const sqlDoc = getSqlDocument(document);

src/language/providers/problemProvider.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,7 @@ export function setCheckerAvailableContext(additionalState = true) {
5858
commands.executeCommand(`setContext`, CHECKER_AVAILABLE_CONTEXT, available);
5959
}
6060

61-
let checkerRunning = false;
6261
export function setCheckerRunningContext(isRunning: boolean) {
63-
checkerRunning = isRunning;
6462
commands.executeCommand(`setContext`, CHECKER_RUNNING_CONTEXT, isRunning);
6563
}
6664

@@ -120,7 +118,8 @@ interface SqlDiagnostic extends Diagnostic {
120118

121119
async function validateSqlDocument(document: TextDocument, specificStatement?: number) {
122120
const checker = SQLStatementChecker.get();
123-
if (remoteAssistIsEnabled() && checker && !checkerRunning) {
121+
const job = remoteAssistIsEnabled(true);
122+
if (checker && job) {
124123
const basename = document.fileName ? path.basename(document.fileName) : `Untitled`;
125124
if (isSafeDocument(document)) {
126125
setCheckerRunningContext(true);
@@ -181,7 +180,7 @@ async function validateSqlDocument(document: TextDocument, specificStatement?: n
181180

182181
let syntaxChecked: SqlSyntaxError[] | undefined;
183182
try {
184-
syntaxChecked = await window.withProgress({ location: ProgressLocation.Window, title: `$(sync-spin) Checking SQL Syntax` }, () => { return checker.checkMultipleStatements(sqlStatementContents) });
183+
syntaxChecked = await window.withProgress({ location: ProgressLocation.Window, title: `$(sync-spin) Checking SQL Syntax` }, () => { return checker.checkMultipleStatements(job, sqlStatementContents) });
185184
} catch (e) {
186185
window.showErrorMessage(`${basename}: the SQL syntax checker failed to run. ${e.message}`);
187186
syntaxChecked = undefined;

0 commit comments

Comments
 (0)