@@ -377,62 +377,66 @@ async function runHandler(options?: StatementInfo) {
377
377
}
378
378
379
379
} 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 ) ;
381
384
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
+ }
429
433
}
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 ) ;
430
439
}
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 ) ;
436
440
437
441
} else {
438
442
// Otherwise... it's a bit complicated.
0 commit comments