@@ -17,7 +17,7 @@ import { generateSqlForAdvisedIndexes } from "./explain/advice";
1717import { updateStatusBar } from "../jobManager/statusBar" ;
1818import { DbCache } from "../../language/providers/logic/cache" ;
1919import { ExplainType } from "../../connection/types" ;
20- import { ColumnMetaData , QueryResult } from "@ibm/mapepire-js " ;
20+ import { queryResultToRpgDs } from "./codegen " ;
2121
2222export type StatementQualifier = "statement" | "update" | "explain" | "onlyexplain" | "json" | "csv" | "cl" | "sql" | "rpg" ;
2323
@@ -386,10 +386,13 @@ async function runHandler(options?: StatementInfo) {
386386 updateStatusBar ( { executing : true } ) ;
387387 const result = await JobManager . runSQLVerbose ( statementDetail . content , undefined , 1 ) ;
388388 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 ) ;
390394 const textDoc = await vscode . workspace . openTextDocument ( { language : 'rpgle' , content } ) ;
391395 await vscode . window . showTextDocument ( textDoc ) ;
392- updateStatusBar ( { executing : false } ) ;
393396 chosenView . setLoadingText ( `RPG data structure generated.` , false ) ;
394397 }
395398
@@ -497,49 +500,6 @@ async function runHandler(options?: StatementInfo) {
497500 }
498501}
499502
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-
543503export function parseStatement ( editor ?: vscode . TextEditor , existingInfo ?: StatementInfo ) : ParsedStatementInfo {
544504 let statementInfo : ParsedStatementInfo = {
545505 content : `` ,
0 commit comments