Skip to content

Commit d80779f

Browse files
committed
Support for removing indicator variables
Signed-off-by: worksofliam <[email protected]>
1 parent 839f80d commit d80779f

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed

src/language/sql/document.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,17 @@ export default class Document {
269269
break;
270270

271271
case `remove`:
272-
newContent = newContent.substring(0, start) + newContent.substring(end+1);
272+
newContent = newContent.substring(0, start) + newContent.substring(end);
273+
if (newContent[start-1] === ` ` && newContent[start] === ` `) {
274+
newContent = newContent.substring(0, start-1) + newContent.substring(start);
275+
}
273276
break;
274277
}
275278
}
276279

277280
return {
278281
changed: areas.length > 0,
279-
content: newContent,
282+
content: newContent.trim(),
280283
parameterCount
281284
};
282285
}

src/language/sql/statement.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -662,11 +662,16 @@ export default class Statement {
662662
let ranges: {type: "remove"|"marker", range: IRange}[] = [];
663663
let intoClause: Token|undefined;
664664
let declareStmt: Token|undefined;
665+
let lastTokenWasMarker = false;
665666

666667
for (let i = 0; i < this.tokens.length; i++) {
667668
const prevToken = this.tokens[i-1];
668669
const currentToken = this.tokens[i];
669670

671+
if (!tokenIs(currentToken, `colon`)) {
672+
lastTokenWasMarker = false;
673+
}
674+
670675
switch (currentToken.type) {
671676
case `statementType`:
672677
const currentValue = currentToken.value.toLowerCase();
@@ -752,14 +757,15 @@ export default class Statement {
752757

753758
if (endToken) {
754759
ranges.push({
755-
type: `marker`,
760+
type: lastTokenWasMarker ? `remove` : `marker`,
756761
range: {
757762
start: currentToken.range.start,
758-
end: endToken.range.end
763+
end: (endToken.range.end)
759764
}
760765
});
761766

762-
i = followingTokenI;
767+
lastTokenWasMarker = true;
768+
i = (followingTokenI-1);
763769
}
764770

765771
break;

src/language/sql/tests/statements.test.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1886,7 +1886,7 @@ describe(`Parameter statement tests`, () => {
18861886
const result = document.removeEmbeddedAreas(statement);
18871887
expect(result.parameterCount).toBe(1);
18881888
expect(result.content).toBe([
1889-
` SELECT EMPNO, FIRSTNME, LASTNAME, JOB`,
1889+
`SELECT EMPNO, FIRSTNME, LASTNAME, JOB`,
18901890
` FROM EMPLOYEE`,
18911891
` WHERE WORKDEPT = ?`
18921892
].join(`\n`));
@@ -1960,6 +1960,32 @@ describe(`Parameter statement tests`, () => {
19601960
expect(result.changed).toBe(false);
19611961
});
19621962

1963+
test('Remove indicator variables', () => {
1964+
const content = [
1965+
`UPDATE CORPDATA.EMPLOYEE`,
1966+
`SET PHONENO = :NEWPHONE:PHONEIND`,
1967+
`WHERE EMPNO = :EMPID;`,
1968+
``,
1969+
`bind: '3535', '000110';`,
1970+
].join(`\n`);
1971+
1972+
const expectedContent = [
1973+
`UPDATE CORPDATA.EMPLOYEE`,
1974+
`SET PHONENO = ?`,
1975+
`WHERE EMPNO = ?`,
1976+
].join(`\n`);
1977+
1978+
const document = new Document(content);
1979+
const statements = document.statements;
1980+
expect(statements.length).toBe(2);
1981+
1982+
const statement = statements[0];
1983+
const result = document.removeEmbeddedAreas(statement);
1984+
console.log(result.content);
1985+
expect(result.parameterCount).toBe(2);
1986+
expect(result.content).toBe(expectedContent);
1987+
});
1988+
19631989
test(`Callable blocks`, () => {
19641990
const lines = [
19651991
`call qsys2.create_abcd();`,

0 commit comments

Comments
 (0)