@@ -17,7 +17,7 @@ import { generateSqlForAdvisedIndexes } from "./explain/advice";
17
17
import { updateStatusBar } from "../jobManager/statusBar" ;
18
18
import { DbCache } from "../../language/providers/logic/cache" ;
19
19
import { ExplainType } from "../../connection/types" ;
20
- import { ColumnMetaData , QueryResult } from "@ibm/mapepire-js " ;
20
+ import { queryResultToRpgDs } from "./codegen " ;
21
21
22
22
export type StatementQualifier = "statement" | "update" | "explain" | "onlyexplain" | "json" | "csv" | "cl" | "sql" | "rpg" ;
23
23
@@ -386,10 +386,13 @@ async function runHandler(options?: StatementInfo) {
386
386
updateStatusBar ( { executing : true } ) ;
387
387
const result = await JobManager . runSQLVerbose ( statementDetail . content , undefined , 1 ) ;
388
388
setCancelButtonVisibility ( false ) ;
389
- let content : string = await statementToRpgDs ( result , statementDetail . content ) ;
389
+ updateStatusBar ( { executing : false } ) ;
390
+ let content = `**free\n\n`
391
+ + `// statement: ${ statementDetail . content } \n\n`
392
+ + `// Row data structure\n`
393
+ + queryResultToRpgDs ( result ) ;
390
394
const textDoc = await vscode . workspace . openTextDocument ( { language : 'rpgle' , content } ) ;
391
395
await vscode . window . showTextDocument ( textDoc ) ;
392
- updateStatusBar ( { executing : false } ) ;
393
396
chosenView . setLoadingText ( `RPG data structure generated.` , false ) ;
394
397
}
395
398
@@ -497,49 +500,6 @@ async function runHandler(options?: StatementInfo) {
497
500
}
498
501
}
499
502
500
- function statementToRpgDs ( result : QueryResult < any > , statement : string ) : string {
501
-
502
- let content = `**free\n\n`
503
- + `// statement: ${ statement } \n\n`
504
- + `// Row data structure\ndcl-ds row_t qualified template;\n` ;
505
-
506
- for ( let i = 0 ; i < result . metadata . column_count ; i ++ ) {
507
- const name = `${ isNaN ( + result . metadata . columns [ i ] . label . charAt ( 0 ) ) ? '' : 'col' } ${ result . metadata . columns [ i ] . label . toLowerCase ( ) } `
508
- content += ` ${ name } ${ columnToRpgDefinition ( result . metadata . columns [ i ] ) } ;\n` ;
509
- }
510
- content += `end-ds;\n` ;
511
- return content ;
512
- }
513
-
514
- function columnToRpgDefinition ( column : ColumnMetaData ) : string {
515
- switch ( column . type ) {
516
- case `NUMERIC` :
517
- return `zoned(${ column . precision } ${ column . scale > 0 ? ' : ' + column . scale : '' } )` ;
518
- case `DECIMAL` :
519
- return `packed(${ column . precision } ${ column . scale > 0 ? ' : ' + column . scale : '' } )` ;
520
- case `CHAR` :
521
- return `char(${ column . precision } )` ;
522
- case `VARCHAR` :
523
- return `varchar(${ column . precision } )` ;
524
- case `DATE` :
525
- return `date` ;
526
- case `TIME` :
527
- return `time` ;
528
- case `TIMESTAMP` :
529
- return `timestamp` ;
530
- case `SMALLINT` :
531
- return `int(5)` ;
532
- case `INTEGER` :
533
- return `int(10)` ;
534
- case `BIGINT` :
535
- return `int(20)` ;
536
- case `BOOLEAN` :
537
- return `ind` ;
538
- default :
539
- return `// type:${ column . type } precision:${ column . precision } scale:${ column . scale } ` ;
540
- }
541
- }
542
-
543
503
export function parseStatement ( editor ?: vscode . TextEditor , existingInfo ?: StatementInfo ) : ParsedStatementInfo {
544
504
let statementInfo : ParsedStatementInfo = {
545
505
content : `` ,
0 commit comments