UNPKG

@sap/xsodata

Version:

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

93 lines (78 loc) 3.64 kB
'use strict'; var oDataUriParser = require('../../lib/uri/oDataUriParser'); var DBSegment = require('../db/dbSegment'); exports.URI0 = 0; // scheme serviceRoot exports.URI1 = 1; // scheme serviceRoot "/" entitySet exports.URI2 = 2; // scheme serviceRoot "/" entitySet "(" keyPredicate ")" exports.URI3 = 3; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityComplexProperty exports.URI4 = 4; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityComplexProperty "/" entityProperty exports.URI5A = 51; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityProperty exports.URI5B = 52; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityProperty value exports.URI6A = 61; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityNavProperty exports.URI6B = 62; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" collectionNavProperty exports.URI7A = 71; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/$links/" entityNavProperty exports.URI7B = 72; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/$links/" collectionNavProperty exports.URI8 = 8; // scheme serviceRoot "/$metadata" exports.URI9 = 9; // scheme serviceRoot "/$batch" exports.URI10 = 10; // scheme serviceRoot "/" serviceOperation-et exports.URI11 = 11; // scheme serviceRoot "/" serviceOperation-collCt exports.URI12 = 12; // scheme serviceRoot "/" serviceOperation-ct exports.URI13 = 13; // scheme serviceRoot "/" serviceOperation-collPrim exports.URI14 = 14; // scheme serviceRoot "/" serviceOperation-prim exports.URI15 = 15; // scheme serviceRoot "/" entitySet count exports.URI16 = 16; // scheme serviceRoot "/" entitySet "(" keyPredicate ")" count exports.URI17 = 17; // scheme serviceRoot "/" entitySet "(" keyPredicate ")" value exports.UNKNOWN_URI = -1; // "fallback" uri type, which is used when uri type cannot be determined /** * Determines and returns the OData URI type based on the information from the specified context. * * @param {object} context - OData context, which represents the current request. * @returns {number} OData URI type (e.g. URI1 having number value of 1). */ exports.determineUriType = function determineUriType(context) { var uriKind = context.oData.kind, dbSegmentLast, isCollection, isCount, isValue, segmentKind, isLinks; if (uriKind === oDataUriParser.URI_KIND_Service) { return exports.URI0; } if (uriKind === oDataUriParser.URI_KIND_MetaData) { return exports.URI8; } if (uriKind === oDataUriParser.URI_KIND_Batch) { return exports.URI9; } dbSegmentLast = context.oData.dbSegmentLast; isCollection = dbSegmentLast.isCollection; isCount = dbSegmentLast.restriction.onlyCount; isValue = dbSegmentLast.restriction.onlyValue; isLinks = context.oData.dbSegment && context.oData.dbSegment.isLinks; segmentKind = dbSegmentLast.kind; if ((segmentKind === DBSegment.DBS_Entity || segmentKind === DBSegment.DBS_ResourceNavigation) && isCount && !isValue && !isLinks) { return isCollection ? exports.URI15 : exports.URI16; } if (isCount) { return exports.UNKNOWN_URI; } if (segmentKind === DBSegment.DBS_Entity && !dbSegmentLast.singleProperty && !isLinks) { if (isCollection) { return exports.URI1; } return isValue ? exports.URI17 : exports.URI2; } if (dbSegmentLast.singleProperty && !isCollection && !isLinks) { return isValue ? exports.URI5B : exports.URI5A; } if (segmentKind === DBSegment.DBS_ResourceNavigation) { if (isLinks) { return isCollection ? exports.URI7B : exports.URI7A; } return isCollection ? exports.URI6B : exports.URI6A; } return exports.UNKNOWN_URI; };