UNPKG

@sap/xsodata

Version:

Expose data from a HANA database as OData V2 service with help of .xsodata files.

90 lines (66 loc) 2.77 kB
'use strict'; var linksSQL = require ("./createLinksSQLStatements_1_n"); var 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 { var 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) { var 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'); var dbSeg = sqlContext.dbSegLast; var stm = new sql.Insert(); stm.setTableName({table: rId}); //SELECT stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId)); return stm; } function masterMNTableInsert(sqlContext, rId) { var dbSeg = sqlContext.dbSegLast; //subselect var subSelect = new sql.Select(); subSelect.addSelects(new sql.SelectFormula(null, '*')); subSelect.setFrom({schema: null, table: rId, alias: null}); var stm = new sql.Upsert(); stm.setTable({table: dbSeg.getOver().object}); stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId)); //Values stm.setSubSelect(subSelect); return stm; }