UNPKG

@sap/dwf-generator

Version:

SAP HANA Data Warehousing Foundation - Generator

127 lines (119 loc) 5.04 kB
'use strict'; const coGenerateSynonym = require('./generate_synonym'); const coCommon = require('./common'); const coRootNameSpace = require('./../const').rootNamespace; const coLogMsg = require('./../const').logMsg; const coSrcPath = require('./../const').defaultFolders.src; function getTemplate(isSource, isTarget){ let loProcedureTemplates = { hana: { spark: 'sparkHotToCold', vora: 'voraHotToCold' }, spark: { hana: 'sparkColdToHot' }, vora: { hana: 'voraColdToHot' } }; if(typeof loProcedureTemplates[isSource] == 'undefined' || typeof loProcedureTemplates[isSource][isTarget] == 'undefined'){ throw new Error(`Relocation from ${isSource} to ${isTarget} is not supported`); } return loProcedureTemplates[isSource][isTarget]; } function lfnPrepareSparkAccess(ioGenerator) { coGenerateSynonym.generateSynonymSet(ioGenerator, ioGenerator.pathOfFiles.common.sparkAccess, [ { schema: 'SYS', object: 'DATA_AGING_SPARK_CREATE_TARGET_OBJECT_DEV', type: 'PROCEDURE', name: ioGenerator.getObjectFullName('DATA_AGING_SPARK_CREATE_TARGET_OBJECT_DEV'), privileges_with_grant_option: ['EXECUTE'] }, { schema: 'SYS', object: 'DATA_AGING_SPARK_MOVE_DATA_DEV', type: 'PROCEDURE', name: ioGenerator.getObjectFullName('DATA_AGING_SPARK_MOVE_DATA_DEV'), privileges_with_grant_option: ['EXECUTE'] } ]); } function lfnGetRule(ioConnection, isDirection) { let lsRuleType = ioConnection.rule.type; let loRule = ioConnection.rule[lsRuleType][isDirection]; return '"' + loRule.column + '"' + loRule.operation + loRule.lowValue + (loRule.highValue || ''); } function lfnGetRemote(ioConnection){ let lsRemoteSourceName = ''; if (ioConnection.source.dataStore.type != 'hana') { let lsDataStoreType = ioConnection.source.dataStore.type; lsRemoteSourceName = ioConnection.source.dataStore[lsDataStoreType].remote; } else if (ioConnection.target.dataStore.type != 'hana') { let lsDataStoreType = ioConnection.target.dataStore.type; lsRemoteSourceName = ioConnection.target.dataStore[lsDataStoreType].remote; } return lsRemoteSourceName; } function lfnGenerateRelocationProcedures(ioGenerator, ioConnection){ let lsSourceType = ioConnection.source.dataStore.type; let lsTargetType = ioConnection.target.dataStore.type; // procedure for source to target if (typeof ioConnection.pathOfFiles.procedure.relocation.source_to_target != 'undefined') { let loProcedure = { fileName: ioConnection.pathOfFiles.procedure.relocation.source_to_target }; loProcedure.fileContent = coCommon.replace( getTemplate(lsSourceType, lsTargetType), { procName: ioGenerator.getObjectFullName(ioGenerator. getRelocationNameSourceToTarget(ioConnection)), logTableType: `${coRootNameSpace}::${coLogMsg.logContext}.${ coLogMsg.tableType}`, logTableName: `${coRootNameSpace}::${coLogMsg.logContext}.${ coLogMsg.logTable}`, context: `${coSrcPath.replace(/\\/g, '/')}/${ ioGenerator.relativeToRoot.replace(/\\/g, '/')}`, sourceTable: ioGenerator.getObjectFullName(ioGenerator. getAccessTableName(ioConnection.source)), targetTable: ioGenerator.getObjectFullName(ioGenerator. getAccessTableName(ioConnection.target)), rule: lfnGetRule(ioConnection, 'source_to_target'), keys: ioGenerator.getKeys(ioConnection.source).map(a => `"${a}"`).join(','), remote: lfnGetRemote(ioConnection) }); ioGenerator.createFile(loProcedure); } // procedure for target to source if (typeof ioConnection.pathOfFiles.procedure.relocation.target_to_source != 'undefined') { let loProcedure = { fileName: ioConnection.pathOfFiles.procedure.relocation.target_to_source }; loProcedure.fileContent = coCommon.replace( getTemplate(lsTargetType, lsSourceType), { procName: ioGenerator.getObjectFullName(ioGenerator. getRelocationNameTargetToSource(ioConnection)), logTableType: `${coRootNameSpace}::${coLogMsg.logContext}.${ coLogMsg.tableType}`, logTableName: `${coRootNameSpace}::${coLogMsg.logContext}.${ coLogMsg.logTable}`, context: `${coSrcPath.replace(/\\/g, '/')}/${ ioGenerator.relativeToRoot.replace(/\\/g, '/')}`, sourceTable: ioGenerator.getObjectFullName(ioGenerator. getAccessTableName(ioConnection.source)), targetTable: ioGenerator.getObjectFullName(ioGenerator. getAccessTableName(ioConnection.target)), rule: lfnGetRule(ioConnection, 'target_to_source'), keys: ioGenerator.getKeys(ioConnection.source).map(a => `"${a}"`).join(','), remote: lfnGetRemote(ioConnection) }); ioGenerator.createFile(loProcedure); } } module.exports = { prepareSparkAccess: lfnPrepareSparkAccess, generateRelocationProcedures: lfnGenerateRelocationProcedures };