|
1 | 1 |
|
| 2 | +import path from "path"; |
2 | 3 | import { getInstance } from "../base";
|
3 |
| - |
4 | 4 | import { JobManager } from "../config";
|
5 | 5 |
|
6 | 6 | export type SQLType = "schemas" | "tables" | "views" | "aliases" | "constraints" | "functions" | "variables" | "indexes" | "procedures" | "sequences" | "packages" | "triggers" | "types" | "logicals";
|
@@ -220,23 +220,27 @@ export default class Schemas {
|
220 | 220 | * @param object Not user input
|
221 | 221 | */
|
222 | 222 | static async generateSQL(schema: string, object: string, internalType: string): Promise<string> {
|
223 |
| - await JobManager.runSQL<{ SRCDTA: string }>([ |
224 |
| - `CALL QSYS2.GENERATE_SQL( DATABASE_OBJECT_NAME => ?, DATABASE_OBJECT_LIBRARY_NAME => ?, DATABASE_OBJECT_TYPE => ? |
225 |
| - , CREATE_OR_REPLACE_OPTION => '1', PRIVILEGES_OPTION => '0' |
226 |
| - , DATABASE_SOURCE_FILE_NAME => '*STMF' |
227 |
| - , STATEMENT_FORMATTING_OPTION => '0' |
228 |
| - , SOURCE_STREAM_FILE => '/tmp/Q_GENSQL_' concat current_user concat '.sql' |
229 |
| - , SOURCE_STREAM_FILE_END_OF_LINE => 'LF' |
230 |
| - , SOURCE_STREAM_FILE_CCSID => 1208 )` |
231 |
| - ].join(` `), { parameters: [object, schema, internalType] }); |
232 |
| - const lines = await JobManager.runSQL<{ LINE: string }>( |
233 |
| - `select LINE |
234 |
| - from table( QSYS2.IFS_READ( PATH_NAME => '/tmp/Q_GENSQL_' concat current_user concat '.sql' ) )` |
235 |
| - ); |
236 |
| - |
237 |
| - const generatedStatement = lines.map( elem => elem.LINE ).join(`\n`); |
238 |
| - |
239 |
| - return generatedStatement; |
| 223 | + const instance = getInstance(); |
| 224 | + const connection = instance.getConnection(); |
| 225 | + |
| 226 | + const result = await connection.withTempDirectory<string>(async (tempDir) => { |
| 227 | + const tempFilePath = path.posix.join(tempDir, `generatedSql.sql`); |
| 228 | + await JobManager.runSQL<{ SRCDTA: string }>([ |
| 229 | + `CALL QSYS2.GENERATE_SQL( DATABASE_OBJECT_NAME => ?, DATABASE_OBJECT_LIBRARY_NAME => ?, DATABASE_OBJECT_TYPE => ? |
| 230 | + , CREATE_OR_REPLACE_OPTION => '1', PRIVILEGES_OPTION => '0' |
| 231 | + , DATABASE_SOURCE_FILE_NAME => '*STMF' |
| 232 | + , STATEMENT_FORMATTING_OPTION => '0' |
| 233 | + , SOURCE_STREAM_FILE => '${tempFilePath}' |
| 234 | + , SOURCE_STREAM_FILE_END_OF_LINE => 'LF' |
| 235 | + , SOURCE_STREAM_FILE_CCSID => 1208 )` |
| 236 | + ].join(` `), { parameters: [object, schema, internalType] }); |
| 237 | + |
| 238 | + // TODO: eventually .content -> .getContent(), it's not available yet |
| 239 | + const contents = (await connection.content.downloadStreamfileRaw(tempFilePath)).toString(); |
| 240 | + return contents; |
| 241 | + }) |
| 242 | + |
| 243 | + return result; |
240 | 244 | }
|
241 | 245 |
|
242 | 246 | static async deleteObject(schema: string, name: string, type: string): Promise<void> {
|
|
0 commit comments