Skip to content

Commit 79d5820

Browse files
committed
RPG qualifier only allowed for select statements
1 parent d2c4608 commit 79d5820

File tree

1 file changed

+57
-53
lines changed

1 file changed

+57
-53
lines changed

src/views/results/index.ts

Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -377,62 +377,66 @@ async function runHandler(options?: StatementInfo) {
377377
}
378378

379379
} else if ([`rpg`].includes(statementDetail.qualifier)) {
380-
chosenView.setLoadingText(`Executing SQL statement...`, false);
380+
if (statementDetail.statement.type !== StatementType.Select) {
381+
vscode.window.showErrorMessage('RPG qualifier only supported for select statements');
382+
} else {
383+
chosenView.setLoadingText(`Executing SQL statement...`, false);
381384

382-
setCancelButtonVisibility(true);
383-
updateStatusBar({executing: true});
384-
const result = await JobManager.runSQLVerbose(statementDetail.content, undefined, 1);
385-
setCancelButtonVisibility(false);
386-
let content = `**free\n\n`
387-
+ `// statement: ${statementDetail.content}\n\n`
388-
+ `// Row data structure\ndcl-ds row_t qualified template;\n`;
389-
390-
for (let i = 0; i < result.metadata.column_count; i++) {
391-
content += ` ${isNaN(+result.metadata.columns[i].label.charAt(0)) ? '' : 'col'}${result.metadata.columns[i].label.toLowerCase()} `;
392-
switch (result.metadata.columns[i].type) {
393-
case `NUMERIC`:
394-
content += `zoned(${result.metadata.columns[i].precision}${result.metadata.columns[i].scale > 0 ? ' : ' + result.metadata.columns[i].scale : ''});\n`;
395-
break;
396-
case `DECIMAL`:
397-
content += `packed(${result.metadata.columns[i].precision}${result.metadata.columns[i].scale > 0 ? ' : ' + result.metadata.columns[i].scale : ''});\n`;
398-
break;
399-
case `CHAR`:
400-
content += `char(${result.metadata.columns[i].precision});\n`;
401-
break;
402-
case `VARCHAR`:
403-
content += `varchar(${result.metadata.columns[i].precision});\n`;
404-
break;
405-
case `DATE`:
406-
content += `date;\n`;
407-
break;
408-
case `TIME`:
409-
content += `time;\n`;
410-
break;
411-
case `TIMESTAMP`:
412-
content += `timestamp;\n`;
413-
break;
414-
case `SMALLINT`:
415-
content += `int(5);\n`;
416-
break;
417-
case `INTEGER`:
418-
content += `int(10);\n`;
419-
break;
420-
case `BIGINT`:
421-
content += `int(20);\n`;
422-
break;
423-
case `BOOLEAN`:
424-
content += `ind;\n`;
425-
break;
426-
default:
427-
content += `// type:${result.metadata.columns[i].type} precision:${result.metadata.columns[i].precision} scale:${result.metadata.columns[i].scale}\n`;
428-
break;
385+
setCancelButtonVisibility(true);
386+
updateStatusBar({executing: true});
387+
const result = await JobManager.runSQLVerbose(statementDetail.content, undefined, 1);
388+
setCancelButtonVisibility(false);
389+
let content = `**free\n\n`
390+
+ `// statement: ${statementDetail.content}\n\n`
391+
+ `// Row data structure\ndcl-ds row_t qualified template;\n`;
392+
393+
for (let i = 0; i < result.metadata.column_count; i++) {
394+
content += ` ${isNaN(+result.metadata.columns[i].label.charAt(0)) ? '' : 'col'}${result.metadata.columns[i].label.toLowerCase()} `;
395+
switch (result.metadata.columns[i].type) {
396+
case `NUMERIC`:
397+
content += `zoned(${result.metadata.columns[i].precision}${result.metadata.columns[i].scale > 0 ? ' : ' + result.metadata.columns[i].scale : ''});\n`;
398+
break;
399+
case `DECIMAL`:
400+
content += `packed(${result.metadata.columns[i].precision}${result.metadata.columns[i].scale > 0 ? ' : ' + result.metadata.columns[i].scale : ''});\n`;
401+
break;
402+
case `CHAR`:
403+
content += `char(${result.metadata.columns[i].precision});\n`;
404+
break;
405+
case `VARCHAR`:
406+
content += `varchar(${result.metadata.columns[i].precision});\n`;
407+
break;
408+
case `DATE`:
409+
content += `date;\n`;
410+
break;
411+
case `TIME`:
412+
content += `time;\n`;
413+
break;
414+
case `TIMESTAMP`:
415+
content += `timestamp;\n`;
416+
break;
417+
case `SMALLINT`:
418+
content += `int(5);\n`;
419+
break;
420+
case `INTEGER`:
421+
content += `int(10);\n`;
422+
break;
423+
case `BIGINT`:
424+
content += `int(20);\n`;
425+
break;
426+
case `BOOLEAN`:
427+
content += `ind;\n`;
428+
break;
429+
default:
430+
content += `// type:${result.metadata.columns[i].type} precision:${result.metadata.columns[i].precision} scale:${result.metadata.columns[i].scale}\n`;
431+
break;
432+
}
429433
}
434+
content += `end-ds;\n`;
435+
const textDoc = await vscode.workspace.openTextDocument({ language: 'rpgle', content });
436+
await vscode.window.showTextDocument(textDoc);
437+
updateStatusBar({executing: false});
438+
chosenView.setLoadingText(`RPG data structure generated.`, false);
430439
}
431-
content += `end-ds;\n`;
432-
const textDoc = await vscode.workspace.openTextDocument({ language: 'rpgle', content });
433-
await vscode.window.showTextDocument(textDoc);
434-
updateStatusBar({executing: false});
435-
chosenView.setLoadingText(`RPG data structure generated.`, false);
436440

437441
} else {
438442
// Otherwise... it's a bit complicated.

0 commit comments

Comments
 (0)