11import { ColumnMetaData , QueryResult } from "@ibm/mapepire-js" ;
22
3- export function queryResultToRpgDs ( result : QueryResult < any > , source : string = 'Name' ) : string {
3+ export function queryResultToRpgDs ( result : QueryResult < any > , source : string = 'Name' ) : string {
44 let content = `dcl-ds row_t qualified template;\n` ;
55 for ( let i = 0 ; i < result . metadata . column_count ; i ++ ) {
66 const name = columnToRpgFieldName ( result . metadata . columns [ i ] , source ) ;
@@ -10,7 +10,7 @@ export function queryResultToRpgDs(result: QueryResult<any>, source: string = 'N
1010 return content ;
1111}
1212
13- export function columnToRpgFieldName ( column : ColumnMetaData , source : string = 'Name' ) : string {
13+ export function columnToRpgFieldName ( column : ColumnMetaData , source : string = 'Name' ) : string {
1414 let name = source === 'Label' ? column . label . toLowerCase ( ) . trim ( ) : column . name . toLowerCase ( ) . trim ( ) ;
1515 name = name . replace ( / \u00fc / g, "u" ) // ü -> u
1616 . replace ( / \u00e4 / g, "a" ) // ä -> a
@@ -24,14 +24,14 @@ export function columnToRpgFieldName(column: ColumnMetaData, source: string = 'N
2424 . replace ( / \s + / g, "_" ) // remaining whitespaces to underscore
2525 . replace ( / [ ^ a - z A - Z 0 - 9 _ ] / g, "" ) // remove non-alphanumeric chars
2626 . replace ( / \_ + / i, "_" ) // replace multiple underscores with single underscore
27- . trim ( ) ;
27+ . trim ( ) ;
2828 if ( ! isNaN ( + name . charAt ( 0 ) ) ) {
2929 name = `col` + name ;
3030 }
3131 return name ;
3232}
3333
34- export function columnToRpgDefinition ( column : ColumnMetaData ) : string {
34+ export function columnToRpgDefinition ( column : ColumnMetaData ) : string {
3535 switch ( column . type ) {
3636 case `NUMERIC` :
3737 return `zoned(${ column . precision } ${ column . scale > 0 ? ' : ' + column . scale : '' } )` ;
@@ -60,51 +60,57 @@ export function columnToRpgDefinition(column: ColumnMetaData) : string {
6060 }
6161}
6262
63- export function queryResultToUdtf ( result : QueryResult < any > , sqlStatement : string ) : string {
63+ export function queryResultToUdtf ( result : QueryResult < any > , sqlStatement : string ) : string {
6464 let columnDefinitions = '' ;
6565 for ( let i = 0 ; i < result . metadata . column_count ; i ++ ) {
6666 const column = result . metadata . columns [ i ] ;
67- columnDefinitions += ` ${ column . name } ${ columnToSqlDefinition ( column ) } ` ;
67+ columnDefinitions += ` ${ column . name } ${ columnToSqlDefinition ( column ) } ` ;
6868 if ( i < result . metadata . column_count - 1 ) {
6969 columnDefinitions += ',\n' ;
7070 } else {
7171 columnDefinitions += '\n' ;
7272 }
7373 }
74-
75- return `create or replace function MyFunction()\n`
76- + `returns table (\n`
74+
75+ return `CREATE OR REPLACE FUNCTION MyFunction()\n`
76+ + ` RETURNS TABLE (\n`
7777 + columnDefinitions
78- + `)\n`
79- + `begin\n`
80- + ` return ${ sqlStatement } ;\n`
81- + `end;` ;
78+ + ` )\n`
79+ + ` NOT DETERMINISTIC\n`
80+ + ` NO EXTERNAL ACTION\n`
81+ + ` READS SQL DATA\n`
82+ + ` SET OPTION COMMIT = *NONE,\n`
83+ + ` DYNUSRPRF = *USER,\n`
84+ + ` USRPRF = *USER\n`
85+ + ` BEGIN\n`
86+ + ` RETURN ${ sqlStatement } ;\n`
87+ + ` END;` ;
8288}
8389
84- export function columnToSqlDefinition ( column : ColumnMetaData ) : string {
90+ export function columnToSqlDefinition ( column : ColumnMetaData ) : string {
8591 switch ( column . type ) {
8692 case 'NUMERIC' :
87- return `numeric (${ column . precision } ,${ column . scale } )` ;
93+ return `NUMERIC (${ column . precision } ,${ column . scale } )` ;
8894 case 'DECIMAL' :
89- return `decimal (${ column . precision } ,${ column . scale } )` ;
95+ return `DECIMAL (${ column . precision } ,${ column . scale } )` ;
9096 case 'CHAR' :
91- return `char (${ column . precision } )` ;
97+ return `CHAR (${ column . precision } )` ;
9298 case 'VARCHAR' :
93- return `varchar (${ column . precision } )` ;
99+ return `VARCHAR (${ column . precision } )` ;
94100 case 'DATE' :
95- return `date ` ;
101+ return `DATE ` ;
96102 case 'TIME' :
97- return `time ` ;
103+ return `TIME ` ;
98104 case 'TIMESTAMP' :
99- return `timestamp ` ;
105+ return `TIMESTAMP ` ;
100106 case 'SMALLINT' :
101- return `integer ` ;
107+ return `INTEGER ` ;
102108 case 'INTEGER' :
103- return `integer ` ;
109+ return `INTEGER ` ;
104110 case 'BIGINT' :
105- return `bigint ` ;
111+ return `BIGINT ` ;
106112 case 'BOOLEAN' :
107- return `boolean ` ;
113+ return `BOOLEAN ` ;
108114 default :
109115 return `-- type:${ column . type } precision:${ column . precision } scale:${ column . scale } */` ;
110116 }
0 commit comments