@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
85 lines (62 loc) • 2.94 kB
JavaScript
;
var linksSQL = require ('./createLinksSQLStatements_1_n');
var 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) {
var 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) {
var 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, dbSeg.sql.rId);
}
function masterMNTableInsertToDel(sqlContext, rId) {
sqlContext.context.logger.debug('createDeleteLinksStatements', 'masterMNTableInsertToDel');
var dbSeg = sqlContext.dbSegLast;
var subSelect = new sql.Select();
subSelect.addSelects(dbSeg.getSelectFragmentsForOverProperties(''));
subSelect.setFrom( {table: dbSeg.getOver().object} );
subSelect.addWhereKeyValuePairs(dbSeg.getOverPropertiesWithValues());
var stm = new sql.Insert();
stm.setTableName({table: rId});
stm.setSubSelect(subSelect);
return stm;
}
function masterMNTableDelete(sqlContext) {
sqlContext.context.logger.debug('createDeleteLinksStatements', 'masterMNTableDelete');
var dbSeg = sqlContext.dbSegLast;
var deleteStmt = new sql.Delete();
deleteStmt.setFrom( {table: dbSeg.getOver().object} );
deleteStmt.addWhereKeyValuePairs(dbSeg.getOverPropertiesWithValues());
return deleteStmt;
}