@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
99 lines (77 loc) • 3.03 kB
JavaScript
;
const linksSQL = require('./createLinksSQLStatements_1_n');
const sql = require('./sqlStatement');
exports.createDeleteLinksStatementsCreateTmpTables = function (
context,
asyncDone
) {
linksSQL.createLinksStatementsCreateTmpTables(context, true);
return asyncDone(null, context);
};
exports.createDeleteLinksStatementsInsert = function (context, asyncDone) {
linksSQL.createLinksStatementsInsert(context, true);
return asyncDone(null, context);
};
/******************** MxN relationships ***********************/
exports.createDeleteLinksMNStatementsCreateTmpTables = function (
context,
asyncDone
) {
const dbSegLast = context.oData.dbSegmentLast,
sqlContext = linksSQL.createMNSQLContext(context, dbSegLast);
context.sql = sqlContext;
dbSegLast.sql.stmContainer = new sql.PostContainer();
// set Hana Cloud / Service context in SQL context; default == cloud
let isHanaCloudDb = true;
if (context.db !== undefined && context.db.isHanaCloudDb !== undefined) {
isHanaCloudDb = context.db.isHanaCloudDb;
}
context.sql.isHanaCloudDb = isHanaCloudDb;
createMNDeleteStatementContainerCreateTmpTables(sqlContext);
return asyncDone(null, context);
};
exports.createDeleteLinksMNStatementsInsert = function (context, asyncDone) {
const sqlContext = context.sql;
createMNDeleteStatementContainerInsert(sqlContext);
return asyncDone(null, context);
};
function createMNDeleteStatementContainerCreateTmpTables(sqlContext) {
linksSQL.createMNStatementContainerCreateTmpTables(sqlContext);
}
function createMNDeleteStatementContainerInsert(sqlContext) {
const dbSeg = sqlContext.dbSegLast;
linksSQL.createMNStatementContainerInsert(sqlContext);
//create insert statement for master table
dbSeg.sql.stmContainer.insertTmp = masterMNTableInsertToDel(
sqlContext,
dbSeg.sql.rId
);
//create insert statement for master table
dbSeg.sql.stmContainer.delete = masterMNTableDelete(sqlContext);
}
function masterMNTableInsertToDel(sqlContext, rId) {
sqlContext.context.logger.debug(
'createDeleteLinksStatements',
'masterMNTableInsertToDel'
);
const dbSeg = sqlContext.dbSegLast;
const subSelect = new sql.Select();
subSelect.addSelects(dbSeg.getSelectFragmentsForOverProperties(''));
subSelect.setFrom({ table: dbSeg.getOver().object });
subSelect.addWhereKeyValuePairs(dbSeg.getOverPropertiesWithValues());
const stm = new sql.Insert();
stm.setTableName({ table: rId });
stm.setSubSelect(subSelect);
return stm;
}
function masterMNTableDelete(sqlContext) {
sqlContext.context.logger.debug(
'createDeleteLinksStatements',
'masterMNTableDelete'
);
const dbSeg = sqlContext.dbSegLast;
const deleteStmt = new sql.Delete();
deleteStmt.setFrom({ table: dbSeg.getOver().object });
deleteStmt.addWhereKeyValuePairs(dbSeg.getOverPropertiesWithValues());
return deleteStmt;
}