@sap/odata-v4
Version:
OData V4.0 server library
36 lines (30 loc) • 1.29 kB
JavaScript
;
const ExpressionParser = require('./ExpressionParser');
const EdmPrimitiveTypeKind = require('../edm/EdmPrimitiveTypeKind');
class FilterParser {
/**
* Create a filter parser.
* @param {Edm} edm entity data model
*/
constructor(edm) {
this._edm = edm;
}
/**
* Parse a filter string into an expression tree.
* @param {UriTokenizer} tokenizer tokenizer containing the string to be parsed
* @param {?EdmType} referencedType type the expression references
* @param {?(EdmEntitySet[])} crossjoinEntitySets entity sets in case of a $crossjoin request
* @param {?Object} aliases alias definitions
* @returns {Expression} the root of the expression tree
* @throws {UriSyntaxError}
* @throws {UriQueryOptionSemanticError}
*/
parse(tokenizer, referencedType, crossjoinEntitySets, aliases) {
const expressionParser = new ExpressionParser(this._edm);
const filterExpression = expressionParser.parse(tokenizer, referencedType, crossjoinEntitySets, aliases);
expressionParser.checkNoCollection(filterExpression);
expressionParser.checkType(filterExpression, EdmPrimitiveTypeKind.Boolean);
return filterExpression;
}
}
module.exports = FilterParser;