UNPKG

jaydata-reso

Version:

Jaydata fork for RESO Web API

100 lines (94 loc) 5.64 kB
$data.Class.define('$data.oDataParser.RequestExpressionBuilder', null, null, { buildConstant: function (value, type) { return new $data.Expressions.ConstantExpression(value, type); }, buildProperty: function (expr, source) { return new $data.Expressions.PropertyExpression(expr, source); }, buildParameter: function (name, type, nodeType) { expr = new $data.Expressions.ParameterExpression(name, type, nodeType); expr.paramIndex = 0; return expr; }, buildSimpleBinary: function (left, right, op, type) { var operator, nodeType, value; switch (op) { case "or": type = "boolean"; nodeType = "or"; operator = "||"; value = "||"; break; case "and": type = "boolean"; nodeType = "and"; operator = "&&"; value = "&&"; break; case "eq": type = "boolean"; nodeType = "equal"; operator = "=="; value = "=="; break; case "ne": type = "boolean"; nodeType = "notEqual"; operator = "!="; value = "!="; break; case "lt": type = "boolean"; nodeType = "lessThan"; operator = "<"; value = "<"; break; case "gt": type = "boolean"; nodeType = "greaterThan"; operator = ">"; value = ">"; break; case "le": type = "boolean"; nodeType = "lessThenOrEqual"; operator = "<="; value = "<="; break; case "ge": type = "boolean"; nodeType = "greaterThanOrEqual"; operator = ">="; value = ">="; break; case "add": type = "number"; nodeType = "add"; operator = "+"; value = "+"; break; case "sub": type = "number"; nodeType = "subtract"; operator = "-"; value = "-"; break; case "mul": type = "number"; nodeType = "multiply"; operator = "*"; value = "*"; break; case "div": type = "number"; nodeType = "divide"; operator = "/"; value = "/"; break; case "mod": type = "number"; nodeType = "modulo"; operator = "%"; value = "%"; break; default: Guard.raise(new Exception("Not implemented operator in $data.oDataParser.RequestExpressionBuilder.buildConstant: " + op)); break; } return new $data.Expressions.SimpleBinaryExpression(left, right, nodeType, value, type); }, buildGlobalCall: function (type, name, args) { var callName; switch (name) { case "substringof": callName = "contains"; break; case "startswith": callName = "startsWith"; break; case "endswith": callName = "endsWith"; break; case "length": callName = "length"; break; case "indexof": callName = "indexOf"; break; case "replace": callName = "replace"; break; case "substring": callName = "substr"; break; case "tolower": callName = "toLowerCase"; break; case "toupper": callName = "toUpperCase"; break; case "trim": callName = "trim"; break; case "concat": callName = "concat"; break; case "day": callName = "day"; break; case "hour": callName = "hour"; break; case "minute": callName = "minute"; break; case "month": callName = "month"; break; case "second": callName = "second"; break; case "year": callName = "year"; break; case "round": callName = "round"; break; case "floor": callName = "floor"; break; case "ceiling": callName = "ceiling"; break; case "geo.distance": callName = "distance"; break; case "geo.intersects": callName = "intersects"; break; case "geo.length": callName = "length"; break; default: Guard.raise(new Exception("Not implemented globalCall name in $data.oDataParser.RequestExpressionBuilder.buildGlobalCall: " + name)); break; } var i = 0; for (; i < args.length; i++) { if (args[i] instanceof $data.Expressions.PropertyExpression) break; } var propertyExp = args.splice(i, 1)[0]; var memberExp = this.buildConstant(callName, 'string'); return new $data.Expressions.CallExpression(propertyExp, memberExp, args); }, buildMemberPath: function (chain, it) { var expr = this.buildParameter(it || 'it', 'unknown', $data.Expressions.ExpressionType.LambdaParameterReference); for (var i = 0; i < chain.length; i++){ expr = this.buildProperty(expr, this.buildConstant(chain[i], /*'string'*/ typeof chain[i])); } return expr; }, buildOrderBy: function (items) { var newItems = new Array(items.length); for (var i = 0; i < items.length; i++) { newItems[i] = { expression: items[i].expr, nodeType: items[i].dir === 'asc' ? $data.Expressions.ExpressionType.OrderBy : $data.Expressions.ExpressionType.OrderByDescending }; } return newItems; }, buildUnary: function (operand, op, type) { var operator, nodeType, value; switch (op) { case "not": type = "boolean"; nodeType = "not"; operator = $data.unaryOperators.getOperator("!"); value = "!"; break; case "minus": type = "number"; nodeType = "negative"; operator = $data.unaryOperators.getOperator("-"); value = "-"; break; case "plus": type = "number"; nodeType = "positive"; operator = $data.unaryOperators.getOperator("+"); value = "+"; break; default: Guard.raise(new Exception("Not implemented operator in $data.oDataParser.RequestExpressionBuilder.buildConstant: " + op)); break; } return new $data.Expressions.UnaryExpression(operand, operator, nodeType, type); } });