UNPKG

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