Skip to content

Commit 51ba7e4

Browse files
Reference all columns by name for select *
Signed-off-by: Sanjula Ganepola <Sanjula.Ganepola@ibm.com>
1 parent 9670650 commit 51ba7e4

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/views/results/codegen.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { ColumnMetaData, QueryResult } from "@ibm/mapepire-js";
2+
import { Token } from "../../language/sql/types";
3+
import { tokenIs } from "../../language/sql/statement";
24

35
export 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

src/views/results/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ async function runHandler(options?: StatementInfo) {
454454
let content = `-- statement:\n`
455455
+ `-- ${statementDetail.content.replace(/(\r\n|\r|\n)/g, '\n-- ') }\n\n`
456456
+ `-- User-defined table function\n`
457-
+ queryResultToUdtf(result, statementDetail.content);
457+
+ queryResultToUdtf(result, statementDetail.content, statementDetail.statement.tokens);
458458

459459
const textDoc = await vscode.workspace.openTextDocument({ language: 'sql', content });
460460
await vscode.window.showTextDocument(textDoc);

0 commit comments

Comments
 (0)