@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
104 lines (81 loc) • 2.88 kB
JavaScript
;
const linksSQL = require('./createLinksSQLStatements_1_n');
const 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 {
const 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) {
const 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'
);
const dbSeg = sqlContext.dbSegLast;
const stm = new sql.Insert();
stm.setTableName({ table: rId });
//SELECT
stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId));
return stm;
}
function masterMNTableInsert(sqlContext, rId) {
const dbSeg = sqlContext.dbSegLast;
//subselect
const subSelect = new sql.Select();
subSelect.addSelects(new sql.SelectFormula(null, '*'));
subSelect.setFrom({ schema: null, table: rId, alias: null });
const stm = new sql.Upsert();
stm.setTable({ table: dbSeg.getOver().object });
stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId));
//Values
stm.setSubSelect(subSelect);
return stm;
}