@sap/dwf-generator
Version:
SAP HANA Data Warehousing Foundation - Generator
101 lines (94 loc) • 3.7 kB
JavaScript
;
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
};