Skip to content

Commit 9670650

Browse files
Add UDTF keywords and fix spacing/casing
Signed-off-by: Sanjula Ganepola <Sanjula.Ganepola@ibm.com>
1 parent c04254f commit 9670650

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

src/views/results/codegen.ts

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { 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-zA-Z0-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

Comments
 (0)