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