@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
76 lines (67 loc) • 2.46 kB
JavaScript
;
const connect = require('../db/connect');
const statementProcessor = require('./../sql/statementProcessor');
/**
* Assert existing temp table statements. If there are still existing temp table
* statements we have to clean up the session before we exist.
*
* @param {Object} context The odata context
* @param {Next} next The callback to be called when finish processing
*/
exports.assertCleanTempTables = function assertCleanTempTables(context, next) {
let statements, statementStr;
context.logger.info('xsodata', 'assertCleanTempTables');
statements = context.networkContext.cleanSessionTruncateContainer.concat(
context.networkContext.cleanSessionDropContainer
);
if (statements.length > 0) {
statementStr = JSON.stringify(statements, null, 2);
context.logger.info(
'xsodata',
'assertCleanTempTables - remaining temp tables found: ' +
statementStr
);
context.logger.info(
'xsodata',
'assertCleanTempTables - starting clean up remaining temp tables'
);
statementProcessor.execTempTableStatements(
context,
statements,
function done(err) {
if (err) {
context.logger.silly(
'assertCleanTempTables',
'Error during cleanup'
);
return connect.dbRollback(
context,
context.db.client,
function (errDB) {
return next(errDB, context);
}
);
}
context.logger.info(
'xsodata',
'assertCleanTempTables - do commit'
);
return context.db.client.commit(function (errDB) {
if (errDB) {
context.logger.silly(
'assertCleanTempTables',
'Commit failed'
);
}
return next(errDB, context);
});
}
);
} else {
next(null, context);
}
};
exports.emptyLists = (context) => {
context.networkContext.cleanSessionTruncateContainer = [];
context.networkContext.cleanSessionDropContainer = [];
};