11import { ColumnMetaData , QueryResult } from "@ibm/mapepire-js" ;
2+ import { Token } from "../../language/sql/types" ;
3+ import { tokenIs } from "../../language/sql/statement" ;
24
35export function queryResultToRpgDs ( result : QueryResult < any > , source : string = 'Name' ) : string {
46 let content = `dcl-ds row_t qualified template;\n` ;
@@ -60,7 +62,7 @@ export function columnToRpgDefinition(column: ColumnMetaData): string {
6062 }
6163}
6264
63- export function queryResultToUdtf ( result : QueryResult < any > , sqlStatement : string ) : string {
65+ export function queryResultToUdtf ( result : QueryResult < any > , sqlStatement : string , tokens : Token [ ] ) : string {
6466 let columnDefinitions = '' ;
6567 for ( let i = 0 ; i < result . metadata . column_count ; i ++ ) {
6668 const column = result . metadata . columns [ i ] ;
@@ -72,6 +74,17 @@ export function queryResultToUdtf(result: QueryResult<any>, sqlStatement: string
7274 }
7375 }
7476
77+ if ( tokens . length > 4 &&
78+ tokenIs ( tokens [ 0 ] , `word` , `UDTF` ) &&
79+ tokenIs ( tokens [ 1 ] , `colon` , `:` ) &&
80+ tokenIs ( tokens [ 2 ] , `statementType` , `SELECT` ) &&
81+ tokenIs ( tokens [ 3 ] , `asterisk` , `*` ) ) {
82+ const prefixEnd = tokens [ 3 ] . range . start - tokens [ 0 ] . range . start - tokens [ 1 ] . range . start - 2 ;
83+ const suffixStart = tokens [ 3 ] . range . start - tokens [ 0 ] . range . start - tokens [ 1 ] . range . start ;
84+ const columns = result . metadata . columns . map ( column => column . name ) . join ( `,\n ` )
85+ sqlStatement = `${ sqlStatement . substring ( 0 , prefixEnd ) } ${ columns } \n ${ sqlStatement . substring ( suffixStart ) } ` ;
86+ }
87+
7588 return `CREATE OR REPLACE FUNCTION MyFunction()\n`
7689 + ` RETURNS TABLE (\n`
7790 + columnDefinitions
0 commit comments