UNPKG

@sap/xsodata

Version:

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

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