UNPKG

jaydata-reso

Version:

Jaydata fork for RESO Web API

263 lines (235 loc) 10.7 kB
$C('$data.Expressions.EntityExpressionVisitor', null, null, { constructor: function () { this.lambdaTypes = []; }, canVisit: function (expression) { return expression instanceof $data.Expressions.ExpressionNode; }, Visit: function (expression, context) { if (!this.canVisit(expression)) return expression; var visitorName = "Visit" + expression.getType().name; if (visitorName in this) { var fn = this[visitorName]; var result = fn.call(this, expression, context); if (typeof result === 'undefined') { return expression; } return result; } //console.log("unhandled expression type:" + expression.getType().name); return expression; }, VisitToArrayExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) { return Container.createToArrayExpression(source); } return expression; }, VisitForEachExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) { return Container.createForEachExpression(source); } return expression; }, VisitMemberInfoExpression: function (expression, context) { return expression; }, VisitSingleExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) return Container.createSingleExpression(source); return expression; }, VisitFirstExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) return Container.createFirstExpression(source); return expression; }, VisitSomeExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) return Container.createSomeExpression(source); return expression; }, VisitFindExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) return Container.createFindExpression(source); return expression; }, VisitEveryExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) return Container.createEveryExpression(source); return expression; }, VisitCountExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) return Container.createCountExpression(source); return expression; }, VisitBatchDeleteExpression: function (expression, context) { var source = this.Visit(expression.source, context); if (source !== expression.source) { return Container.createBatchDeleteExpression(source); } return expression; }, VisitObjectLiteralExpression: function (expression, context) { var newValues = expression.members.map(function (ofe) { return this.Visit(ofe, context); }, this); var equal = true; for (var i = 0; i < expression.members.length; i++) { equal = equal && (expression.members[i] === newValues[i]); } if (!equal) { return Container.createObjectLiteralExpression(newValues); } return expression; }, VisitObjectFieldExpression: function (expression, context) { var newExpression = this.Visit(expression.expression, context); if (expression.expression !== newExpression) { return Container.createObjectFieldExpression(expression.fieldName, newExpression); } return expression; }, VisitIncludeExpression: function (expression, context) { var newExpression = this.Visit(expression.source, context); if (newExpression !== expression.source) { return Container.createIncludeExpression(newExpression, expression.selector); } return expression; }, VisitUnaryExpression: function(expression, context) { /// <param name="expression" type="$data.Expressions.UnaryExpression"></param> /// <param name="context"></param> var operand = this.Visit(expression.operand, context); if (expression.operand !== operand) { return Container.createUnaryExpression(operand, expression.operator, expression.nodeType, expression.resolution); }; return expression; }, VisitSimpleBinaryExpression: function (expression, context) { ///<summary></summary> ///<param name="expression" type="$data.Expressions.SimpleBinaryExpression"/> ///<param name="context" type="Object"/> //<returns type="$data.Expressions.SimpleBinaryExpression"/> var left = this.Visit(expression.left, context); var right = this.Visit(expression.right, context); if (left !== expression.left || right !== expression.right) { return new $data.Expressions.SimpleBinaryExpression(left, right, expression.nodeType, expression.operator, expression.type, expression.resolution); } return expression; }, VisitEntityContextExpression: function (expression, context) { return expression; }, VisitCodeExpression: function (expression, context) { /// <param name="expression" type="$data.Expressions.CodeExpression"></param> /// <param name="context"></param> /// <returns type="$data.Expressions.CodeExpression"></returns> return expression; }, VisitComplexTypeExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { var result = Container.createComplexTypeExpression(source, selector); return result; } return expression; }, VisitEntityExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { var result = Container.createEntityExpression(source, selector); return result; } return expression; }, VisitEntityFieldExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { var result = Container.createEntityFieldExpression(source, selector); return result; } return expression; }, VisitEntityFieldOperationExpression: function (expression, context) { var source = this.Visit(expression.source, context); var operation = this.Visit(expression.operation, context); var parameters = expression.parameters.map(function (p) { return this.Visit(p); }, this); var result = Container.createEntityFieldOperationExpression(source, operation, parameters); return result; }, VisitParametricQueryExpression: function (expression, context) { var exp = this.Visit(expression.expression, context); var args = expression.parameters.map(function (p) { return this.Visit(p); }, this); var result = Container.createParametricQueryExpression(exp, args); return result; }, VisitEntitySetExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { return Container.createEntitySetExpression(source, selector, expression.params, expression.instance); } return expression; }, VisitInlineCountExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { return Container.createInlineCountExpression(source, selector, expression.params, expression.instance); } return expression; }, VisitFilterExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { return Container.createFilterExpression(source, selector, expression.params, expression.instance); } return expression; }, VisitProjectionExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { var expr = Container.createProjectionExpression(source, selector, expression.params, expression.instance); expr.projectionAs = expression.projectionAs; return expr; } return expression; }, VisitOrderExpression: function (expression, context) { var source = this.Visit(expression.source, context); var selector = this.Visit(expression.selector, context); if (source !== expression.source || selector !== expression.selector) { return Container.createOrderExpression(source, selector, expression.nodeType); } return expression; }, VisitPagingExpression: function (expression, context) { var source = this.Visit(expression.source, context); var amount = this.Visit(expression.amount, context); if (source !== expression.source || amount !== expression.amount) { return Container.createPagingExpression(source, amount, expression.nodeType); } return expression; } });