@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
90 lines (66 loc) • 2.77 kB
JavaScript
;
var linksSQL = require ("./createLinksSQLStatements_1_n");
var sql = require('./sqlStatement');
exports.createPutPostLinksStatementsCreateTmpTables = function (context, asyncDone) {
linksSQL.createLinksStatementsCreateTmpTables (context);
return asyncDone(null, context);
};
exports.createPutPostLinksStatementsInsert = function (context, asyncDone) {
linksSQL.createLinksStatementsInsert(context);
return asyncDone(null, context);
};
/******************** MxN relationships ***********************/
exports.createPutPostLinksMNStatementsCreateTmpTables = function (context, asyncDone) {
try {
var dbSegLast = context.oData.dbSegmentLast,
sqlContext = linksSQL.createMNSQLContext(context, dbSegLast);
context.sql = sqlContext;
dbSegLast.sql.stmContainer = new sql.PostContainer();
createMNPutPostLinksStatementContainerCreateTmpTables (sqlContext);
return asyncDone(null, context);
} catch (err) {
return asyncDone(err, context);
}
};
exports.createPutPostLinksMNStatementsInsert = function (context, asyncDone) {
try {
const sqlContext = context.sql;
createMNPutPostLinksStatementContainerInsert(sqlContext);
return asyncDone(null, context);
} catch (err) {
return asyncDone(err, context);
}
};
function createMNPutPostLinksStatementContainerCreateTmpTables(sqlContext) {
linksSQL.createMNStatementContainerCreateTmpTables(sqlContext);
}
function createMNPutPostLinksStatementContainerInsert(sqlContext) {
var dbSeg = sqlContext.dbSegLast;
linksSQL.createMNStatementContainerInsert(sqlContext);
//create insert statement for master table
dbSeg.sql.stmContainer.insertTmp = masterMNTableInsertTmp(sqlContext, dbSeg.sql.rId);
//create insert statement for master table
dbSeg.sql.stmContainer.insertReal = masterMNTableInsert(sqlContext, dbSeg.sql.rId);
}
function masterMNTableInsertTmp(sqlContext, rId) {
sqlContext.context.logger.debug('createPutPostLinksStatements', 'masterMNTableInsertTmp');
var dbSeg = sqlContext.dbSegLast;
var stm = new sql.Insert();
stm.setTableName({table: rId});
//SELECT
stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId));
return stm;
}
function masterMNTableInsert(sqlContext, rId) {
var dbSeg = sqlContext.dbSegLast;
//subselect
var subSelect = new sql.Select();
subSelect.addSelects(new sql.SelectFormula(null, '*'));
subSelect.setFrom({schema: null, table: rId, alias: null});
var stm = new sql.Upsert();
stm.setTable({table: dbSeg.getOver().object});
stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId));
//Values
stm.setSubSelect(subSelect);
return stm;
}