UNPKG

@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
'use strict'; 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; }