UNPKG

@sap/dwf-generator

Version:

SAP HANA Data Warehousing Foundation - Generator

101 lines (94 loc) 3.7 kB
'use strict'; const coFs = require('fs'); const coGenerateSynonym = require('./generate_synonym'); const coCommon = require('./common'); function lfnGenerateTables(ioGenerator, ioConnection) { lfnGenerateTable(ioGenerator, ioConnection.source, ioConnection.pathOfFiles.source); lfnGenerateTable(ioGenerator, ioConnection.target, ioConnection.pathOfFiles.target); } function lfnGenerateTable(ioGenerator, ioNode, ioPaths) { // determin if the table already exists let loDataStore = ioNode[ioNode.type]; let lsObjectType = loDataStore.object.type; switch (loDataStore.type) { case 'iq': case 'vora': case 'spark': try { coFs.accessSync(ioPaths.virtualTable, coFs.F_OK); } catch (ioErr) { lfnGenerateGrantsRemoteSource(ioGenerator, ioNode, ioPaths); lfnGenerateVirtualTableConfig(ioGenerator, ioNode, ioPaths); let loVirtTable = {}; let lsTableName = ioGenerator.getAccessTableName(ioNode); loVirtTable.fileName = ioPaths.virtualTable; let lsRemoteTable = `"${loDataStore[loDataStore.type].remote}"` + `."${loDataStore[loDataStore.type].database}"` + `."${loDataStore.object[lsObjectType].schema}"` + `."${loDataStore.object[lsObjectType].object}"`; loVirtTable.fileContent = coCommon.replace('virtualTable', { table: ioGenerator.getObjectFullName(lsTableName), remoteTable: lsRemoteTable }); ioGenerator.createFile(loVirtTable); } break; case 'hana' || 'dt': // local table or synonym if (!ioNode.dataStore.object[lsObjectType].schema) break; // determin if the table already exists, one table can be used for more connections try { coFs.accessSync(ioNode.pathOfFiles.synonym, coFs.F_OK); } catch (ioErr) { let lsObject = loDataStore.object[lsObjectType].object; let lsName = lsObject.split('.').pop().split('::').pop(); let loObjectData = { name: ioGenerator.getObjectFullName(lsName), schema: loDataStore.object[lsObjectType].schema, object: lsObject, type: 'TABLE', privileges_with_grant_option: ['SELECT', 'INSERT', 'DELETE'] }; coGenerateSynonym.generateSynonymSet(ioGenerator, ioPaths, [loObjectData]); } break; default: break; } } function lfnGenerateGrantsRemoteSource(ioGenerator, ioNode, ioPaths) { let loGrants = {}; loGrants.fileName = ioPaths.grants; loGrants.fileContent = coCommon.replace('grants', { grantorService: ioGenerator.get('generate.hdbgrants.grantor_service.name'), objectOwner: { global_object_privileges: [ { name: ioNode.dataStore[ioNode.dataStore.type].remote, type: 'REMOTE SOURCE', privileges_with_grant_option: ['CREATE VIRTUAL TABLE', 'DROP'] } ] } }, true); ioGenerator.createFile(loGrants); } function lfnGenerateVirtualTableConfig(ioGenerator, ioNode, ioPaths) { let loVirtTabCfg = {}; loVirtTabCfg.fileName = ioPaths.virtualTableConfig; let loDataStore = ioNode[ioNode.type]; let lsTableName = ioGenerator.getAccessTableName(ioNode); let lsObjectType = loDataStore.object.type; loVirtTabCfg.fileContent = coCommon.replace('virtualTableConfig', { name: ioGenerator.getObjectFullName(lsTableName), remote: loDataStore[loDataStore.type].remote, database: loDataStore[loDataStore.type].database, schema: loDataStore.object[lsObjectType].schema, object: loDataStore.object[lsObjectType].object }, true); ioGenerator.createFile(loVirtTabCfg); } module.exports = { generateTables: lfnGenerateTables };