@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
45 lines (32 loc) • 1.19 kB
JavaScript
;
const Http400_BadRequest = require('../../utils/errors/http/badRequest');
module.exports = function checkFilterOrderByOnGenKeyColumn(context, callback) {
let genKey;
if (context.oData.dbSegmentLast.entityType.hasGeneratedKey()) {
genKey = context.oData.dbSegmentLast.entityType.keys.generatedKey;
}
const filter = context.oData.systemQueryParameters.filter;
const orderBy = context.oData.systemQueryParameters.orderby;
if (!genKey || (!filter && !orderBy)) {
return callback(null, context);
}
if (filter && check(genKey, filter)) {
return callback(createError('filter'), context);
}
if (orderBy && check(genKey, orderBy)) {
return callback(createError('orderby'), context);
}
return callback(null, context);
};
function createError(sqo) {
const errorMessage =
'$' + sqo + ' is not allowed for generated key columns.';
return new Http400_BadRequest(errorMessage);
}
function check(genKey, type) {
let violation = genKey === type.property;
if (!violation) {
violation = type.getChildren().some(check.bind(null, genKey));
}
return violation;
}